/* (c) 2014 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.wps.validator;
import java.awt.image.RenderedImage;
import java.awt.image.SampleModel;
import org.geotools.coverage.grid.GridCoverage2D;
/**
* Estimates the size of a raster as an uncompressed in memory grid
*
* @author Andrea Aime - GeoSolutions
*/
public class RasterSizeEstimator implements ObjectSizeEstimator {
@Override
public long getSizeOf(Object object) {
if (object instanceof GridCoverage2D) {
GridCoverage2D coverage = (GridCoverage2D) object;
return estimateSize(coverage.getRenderedImage());
} else if (object instanceof RenderedImage) {
return estimateSize((RenderedImage) object);
}
return ObjectSizeEstimator.UNKNOWN_SIZE;
}
private long estimateSize(RenderedImage renderedImage) {
SampleModel sm = renderedImage.getSampleModel();
int bits = 0;
for (int ss : sm.getSampleSize()) {
bits += ss;
}
int pixelSizeByte = (int) Math.ceil(bits / 8d);
return renderedImage.getWidth() * renderedImage.getHeight() * pixelSizeByte;
}
}