/* (c) 2015 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wcs.response;
import java.awt.image.IndexColorModel;
import java.awt.image.RenderedImage;
import java.util.logging.Logger;
import org.geoserver.ogr.core.FormatAdapter;
import org.geotools.coverage.CoverageFactoryFinder;
import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.image.ImageWorker;
import org.geotools.util.logging.Logging;
/**
* Adapts a paletted coverage to RGB(A) for formats that cannot take paletted as an input
*
* @author Andrea Aime - GeoSolutions
*/
public class PalettedToRGB implements FormatAdapter<GridCoverage2D> {
static final Logger LOGGER = Logging.getLogger(PalettedToRGB.class);
@Override
public GridCoverage2D adapt(GridCoverage2D input) {
RenderedImage image = input.getRenderedImage();
if(image.getSampleModel().getNumBands() == 1 && image.getColorModel() instanceof IndexColorModel) {
LOGGER.fine("Expanding image from indexed to rgb(a)");
ImageWorker iw = new ImageWorker(image);
iw.forceComponentColorModel();
RenderedImage converted = iw.getRenderedImage();
GridCoverage2D adapted = CoverageFactoryFinder.getGridCoverageFactory(null).create(input.getName(),
converted, input.getGridGeometry(), null, new GridCoverage2D[] {input}, input.getProperties());
return adapted;
}
return input;
}
}