private static RasterRegion[] createRasterRegions(final Term[] terms, final int width, final int height) { final Set<RasterDataSymbol> rasterSymbolSet = new HashSet<RasterDataSymbol>(); for (final Term term : terms) { final RasterDataSymbol[] refRasterDataSymbols = BandArithmetic.getRefRasterDataSymbols(term); rasterSymbolSet.addAll(Arrays.asList(refRasterDataSymbols)); } List<RasterRegion> rasterRegions = new ArrayList<RasterRegion>(rasterSymbolSet.size()); for (RasterDataSymbol symbol : rasterSymbolSet) { RasterRegion rasterRegion = RasterRegion.createRasterRegion(symbol.getRaster(), width, height); rasterRegions.add(rasterRegion); symbol.setData(rasterRegion.getData().getElems()); } return rasterRegions.toArray(new RasterRegion[rasterRegions.size()]); }
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; }