private boolean isPixelValid(Band band, int pixelX, int pixelY, int level) { if (band.isValidMaskUsed()) { PlanarImage image = ImageManager.getInstance().getValidMaskImage(band, level); Raster data = getRasterTile(image, pixelX, pixelY); return data.getSample(pixelX, pixelY, 0) != 0; } else { return true; } }
@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); } };
static PlanarImage getEffectiveMaskImage(RasterDataNode raster, int level, RenderedImage roiImage) { PlanarImage maskImage = ImageManager.getInstance().getValidMaskImage(raster, level); if (maskImage == roiImage) { return maskImage; } if (roiImage != null) { if (maskImage != null) { final ImageLayout imageLayout = new ImageLayout(); imageLayout.setTileWidth(maskImage.getTileWidth()); imageLayout.setTileHeight(maskImage.getTileHeight()); final RenderingHints hints = new RenderingHints(JAI.KEY_IMAGE_LAYOUT, imageLayout); maskImage = MinDescriptor.create(maskImage, roiImage, hints); } else { maskImage = PlanarImage.wrapRenderedImage(roiImage); } } return maskImage; }
private RenderedImage createColored1BandImage(RasterDataNode raster, ImageInfo imageInfo, int level) { Assert.notNull(raster, "raster"); if (imageInfo == null) { imageInfo = raster.getImageInfo(ProgressMonitor.NULL); } Assert.notNull(imageInfo, "imageInfo"); RenderedImage sourceImage = getSourceImage(raster, level); RenderedImage validMaskImage = getValidMaskImage(raster, level); PlanarImage image = createByteIndexedImage(raster, sourceImage, imageInfo); image = createMatchCdfImage(image, imageInfo.getHistogramMatching(), new Stx[]{raster.getStx()}); image = createLookupRgbImage(raster, image, validMaskImage, imageInfo); return image; }
private PlanarImage createColored3BandImage(RasterDataNode[] rasters, ImageInfo rgbImageInfo, int level) { Assert.notNull(rasters, "rasters"); Assert.notNull(rgbImageInfo, "rgbImageInfo"); RenderedImage[] images = new RenderedImage[rasters.length]; RenderedImage[] validMaskImages = new RenderedImage[rasters.length]; Stx[] stxs = new Stx[rasters.length]; for (int i = 0; i < rasters.length; i++) { RasterDataNode raster = rasters[i]; stxs[i] = raster.getStx(); RenderedImage sourceImage = getSourceImage(raster, level); images[i] = createByteIndexedImage(raster, sourceImage, rgbImageInfo.getRgbChannelDef().getMinDisplaySample(i), rgbImageInfo.getRgbChannelDef().getMaxDisplaySample(i), rgbImageInfo.getRgbChannelDef().getGamma(i)); validMaskImages[i] = getValidMaskImage(raster, level); } // todo - correctly handle no-data color (nf, 10.10.2008) return createMergeRgbaOp(images, validMaskImages, rgbImageInfo.getHistogramMatching(), stxs); }
/** * size of source image is calculated in * {@code com.bc.ceres.glevel.support.DefaultMultiLevelSource#createImage(int)} * <p/> * size of mask image is calculated in * {@code org.esa.beam.jai.ImageManager#createSingleBandedImageLayout(org.esa.beam.framework.datamodel.RasterDataNode)} * <p/> * they shall not produce different results. */ @Test public void testImageAndMaskSize() { Product p = new Product("n", "t", 8501, 7651); Band b = p.addBand("b", ProductData.TYPE_FLOAT32); b.setNoDataValue(13); b.setNoDataValueUsed(true); b.setSourceImage(ConstantDescriptor.create((float) p.getSceneRasterWidth(), (float) p.getSceneRasterHeight(), new Float[]{42f}, null)); ImageManager imageManager = ImageManager.getInstance(); int levelCount = b.getSourceImage().getModel().getLevelCount(); PlanarImage sourceImage = imageManager.getSourceImage(b, levelCount - 1); PlanarImage maskImage = imageManager.getValidMaskImage(b, levelCount - 1); assertEquals(sourceImage.getWidth(), maskImage.getWidth()); assertEquals(sourceImage.getHeight(), maskImage.getHeight()); }