@Override protected RenderedImage createImage(int level) { ImageManager imageManager = ImageManager.getInstance(); RenderingHints rh = new RenderingHints(JAI.KEY_BORDER_EXTENDER, BorderExtender.createInstance( BorderExtenderCopy.BORDER_COPY)); PlanarImage geophysicalImage = imageManager.getGeophysicalImage(getSource(), level); int dataBufferType = getDataType() == ProductData.TYPE_FLOAT64 ? DataBuffer.TYPE_DOUBLE : DataBuffer.TYPE_FLOAT; geophysicalImage = FormatDescriptor.create(geophysicalImage, dataBufferType, null); PlanarImage validMaskImage = imageManager.getValidMaskImage(getSource(), level); if (validMaskImage != null) { geophysicalImage = new FillConstantOpImage(geophysicalImage, validMaskImage, Float.NaN); } return createSourceLevelImage(geophysicalImage, level, rh); } };
public static void accumulate(RasterDataNode rasterDataNode, int level, RenderedImage roiImage, Shape roiShape, StxOp op, ProgressMonitor pm) { Assert.notNull(rasterDataNode, "raster"); Assert.argument(level >= 0, "level"); Assert.argument(roiImage == null || level == 0, "level"); Assert.notNull(pm, "pm"); final PlanarImage dataImage = ImageManager.getInstance().getGeophysicalImage(rasterDataNode, level); if (dataImage.getSampleModel().getNumBands() != 1) { throw new IllegalStateException("dataImage.sampleModel.numBands != 1"); } PlanarImage maskImage = getEffectiveMaskImage(rasterDataNode, level, roiImage); Shape maskShape = getEffectiveShape(rasterDataNode, roiShape); accumulate(op, dataImage, maskImage, maskShape, pm); }
private boolean addDataToReferredRasterDataSymbols(Rectangle destRect, Term term) { for (final RasterDataSymbol symbol : BandArithmetic.getRefRasterDataSymbols(term)) { final RenderedImage sourceImage; final int dataType; final RasterDataNode rasterDataNode = symbol.getRaster(); if (symbol.getSource() == RasterDataSymbol.GEOPHYSICAL) { sourceImage = ImageManager.getInstance().getGeophysicalImage(rasterDataNode, getLevel()); dataType = rasterDataNode.getGeophysicalDataType(); } else { sourceImage = ImageManager.getInstance().getSourceImage(rasterDataNode, getLevel()); dataType = rasterDataNode.getDataType(); } final Raster sourceRaster = sourceImage.getData(destRect); if (sourceRaster instanceof NoDataRaster) { return false; } DataBuffer dataBuffer = sourceRaster.getDataBuffer(); if (dataBuffer.getSize() != destRect.width * destRect.height) { final WritableRaster writableRaster = sourceRaster.createCompatibleWritableRaster(destRect); sourceImage.copyData(writableRaster); dataBuffer = writableRaster.getDataBuffer(); } symbol.setData(ProductData.createInstance(dataType, ImageUtils.getPrimitiveArray(dataBuffer))); } return true; }