...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
static Product createTestProduct(int width, int height, int tileSize, int numResolutionsMax) { Product product = new Product("test", "test", width, height); product.setPreferredTileSize(tileSize, tileSize); product.setNumResolutionsMax(numResolutionsMax); Band realBand = product.addBand("real", "X * X - Y * Y", ProductData.TYPE_FLOAT64); Band imagBand = product.addBand("imag", "2 * X * Y", ProductData.TYPE_FLOAT64); Band magnitudeBand = product.addBand("magnitude", ProductData.TYPE_FLOAT64); final MultiLevelModel multiLevelModel = ImageManager.getMultiLevelModel(realBand); final MultiLevelSource multiLevelSource = new AbstractMultiLevelSource(multiLevelModel) { @Override public void reset() { super.reset(); magnitudeBand.fireProductNodeDataChanged(); } @Override public RenderedImage createImage(int level) { return new MagnitudeOpImage(magnitudeBand, ResolutionLevel.create(getModel(), level), realBand, imagBand); } }; magnitudeBand.setSourceImage(new DefaultMultiLevelImage(multiLevelSource)); return product; } static class MagnitudeOpImage extends RasterDataNodeOpImage { private final Band realBand; private final Band imagBand; public MagnitudeOpImage(Band outputBand, ResolutionLevel level, Band realBand, Band imagBand) { super(outputBand, level); this.realBand = realBand; this.imagBand = imagBand; } @Override protected void computeProductData(ProductData outputData, Rectangle region) throws IOException { ProductData realData = getRawProductData(realBand, region); ProductData imagData = getRawProductData(imagBand, region); int numElems = region.width * region.height; for (int i = 0; i < numElems; i++) { double real = realData.getElemDoubleAt(i); double imag = imagData.getElemDoubleAt(i); double result = Math.sqrt(real * real + imag * imag); outputData.setElemDoubleAt(i, result); } } } |
...