/** * Create the tiled image and the associated graphics object that we will be used to draw the * vector features into a raster. * * <p>Note, the graphics objects will be an instance of TiledImageGraphics which is a sub-class * of Graphics2D. */ private void createImage(Dimension gridDim) { ColorModel cm = ColorModel.getRGBdefault(); SampleModel sm = cm.createCompatibleSampleModel(gridDim.width, gridDim.height); image = new TiledImage(0, 0, gridDim.width, gridDim.height, 0, 0, sm, cm); graphics = image.createGraphics(); graphics.setPaintMode(); graphics.setComposite(AlphaComposite.Src); }
protected BufferedImage rescaleImageViaPlanarImage(BufferedImage image) { PlanarImage planarImage = new TiledImage(image, image.getWidth(), image.getHeight());
new TiledImage( gridBounds.x, gridBounds.y,
@Override public GridCoverage2D read(GeneralParameterValue[] parameters) throws IOException { GridCoverage2D originalCoverage = super.read(parameters); RenderedImage source = new ImageWorker(originalCoverage.getRenderedImage()) .format(DataBuffer.TYPE_USHORT) .getRenderedImage(); TiledImage shortImage = new TiledImage( source.getMinX(), source.getMinY(), source.getWidth(), source.getHeight(), source.getTileGridXOffset(), source.getTileGridYOffset(), source.getSampleModel(), null); shortImage.set(source); // force color model to be null, this also occurs in real cases GridCoverage2D coverage = CoverageFactoryFinder.getGridCoverageFactory(null) .create( originalCoverage.getName(), shortImage, originalCoverage.getEnvelope2D()); return coverage; } };
/** * Create the tiled image and the associated graphics object that we will be used to * draw the vector features into a raster. * <p> * Note, the graphics objects will be an * instance of TiledImageGraphics which is a sub-class of Graphics2D. */ private void createImage( Dimension gridDim ) { ColorModel cm = ColorModel.getRGBdefault(); SampleModel sm = cm.createCompatibleSampleModel(gridDim.width, gridDim.height); image = new TiledImage(0, 0, gridDim.width, gridDim.height, 0, 0, sm, cm); graphics = image.createGraphics(); graphics.setPaintMode(); graphics.setComposite(AlphaComposite.Src); }
@Override protected PlanarImage execute (final @Nonnull AssignColorProfileOp operation, final @Nonnull EditableImage image, final @Nonnull PlanarImage planarImage) { log.info("execute({}) - {} ", operation, planarImage.getSampleModel()); final ICC_Profile iccProfile = operation.getIccProfile(); final TiledImage tiledImage = new TiledImage(planarImage, true); final int[] bandSelect = new int[planarImage.getSampleModel().getNumBands()]; for (int i = 0; i < bandSelect.length; i++) { bandSelect[i] = i; } final TiledImage result = tiledImage.getSubImage(bandSelect, JAIUtils.getColorModel(planarImage, iccProfile)); JAIUtils.logImage(log, ">>>> returning", planarImage); return result; } }
/******************************************************************************************************************* * * {@inheritDoc} * ******************************************************************************************************************/ @Nonnull @Override public EditableImage createCopy (final boolean copyContents) { final TiledImage image2 = new TiledImage(getPlanarImage(), false); if (copyContents) { image2.setData(getPlanarImage().getData()); // FIXME: getData() creates a copy! } return createImage(image2); }
private static TiledImage createImage() { PixelInterleavedSampleModel sm = new PixelInterleavedSampleModel(DataBuffer.TYPE_USHORT, 120, 80, 1, 120, new int[]{0}); ColorModel cm = PlanarImage.createColorModel(sm); TiledImage image = new TiledImage(0, 0, 256, 256, 0, 0, sm, cm); return image; } }
/******************************************************************************* * * @inheritDoc * ******************************************************************************/ public EditableImage createCopy (boolean copyContents) { TiledImage image2 = new TiledImage(getPlanarImage(), false); if (copyContents) { image2.setData(getPlanarImage().getData()); // FIXME: getData() creates a copy! } return createImage(image2); }
/******************************************************************************* * * ******************************************************************************/ public static WritableRaster getRaster (final PlanarImage source) { assert source.getNumXTiles() == 1 : "getNumXTiles is " + source.getNumXTiles(); assert source.getNumYTiles() == 1 : "getNumYTiles is " + source.getNumYTiles(); TiledImage tiledImage = new TiledImage(source, true); return tiledImage.getWritableTile(0, 0); // FIXME: in realta' per le TiledImage non esiste: ci sono tanti raster, uno // per ogni tile, e quindi richiederne uno solo implica un bel po' di lavoro // Verificare invece se si puo' eliminare questo metodo // Si potrebbe eliminare se il demosaicing venisse implementato come un'operazione JAI. }
/******************************************************************************* * * ******************************************************************************/ public static WritableRaster getRaster (final PlanarImage source) { assert source.getNumXTiles() == 1 : "getNumXTiles is " + source.getNumXTiles(); assert source.getNumYTiles() == 1 : "getNumYTiles is " + source.getNumYTiles(); TiledImage tiledImage = new TiledImage(source, true); return tiledImage.getWritableTile(0, 0); // FIXME: in realta' per le TiledImage non esiste: ci sono tanti raster, uno // per ogni tile, e quindi richiederne uno solo implica un bel po' di lavoro // Verificare invece se si puo' eliminare questo metodo // Si potrebbe eliminare se il demosaicing venisse implementato come un'operazione JAI. }
private static TiledImage createImage(int dataType, int value) { SampleModel sm = new ComponentSampleModel(dataType, DEFAULT_WIDTH, DEFAULT_HEIGHT, 1, DEFAULT_WIDTH, new int[] { 0 }); TiledImage image = new TiledImage(sm, DEFAULT_TILE_WIDTH, DEFAULT_TILE_HEIGHT); int minX = 10; int maxX = 20; int minY = 10; int maxY = 20; for (int x = minX; x < maxX; x++) { for (int y = minY; y < maxY; y++) { image.setSample(x, y, 0, value); } } return image; }
/******************************************************************************* * * @inheritDoc * ******************************************************************************/ protected PlanarImage execute (AssignColorProfileOp operation, final EditableImage image, PlanarImage planarImage) { ICC_Profile iccProfile = operation.getICCProfile(); TiledImage tiledImage = new TiledImage(planarImage, true); int[] bandSelect = new int[planarImage.getSampleModel().getNumBands()]; for (int i = 0; i < bandSelect.length; i++) { bandSelect[i] = i; } return tiledImage.getSubImage(bandSelect, JAIUtils.getColorModel(planarImage, iccProfile)); } }
@Test public void testTranslatedImage() throws Exception { BufferedImage bi = new BufferedImage(256, 256, BufferedImage.TYPE_BYTE_GRAY); TiledImage image = new TiledImage(0, 0, 256, 256, 1, 1, bi.getSampleModel() .createCompatibleSampleModel(256, 256), bi.getColorModel()); Graphics g = image.createGraphics(); g.setColor(Color.WHITE); g.fillRect(0, 0, 20, 20); g.setColor(new Color(20, 20, 20)); // A dark gray g.fillRect(20, 20, 20, 20); g.setColor(new Color(200, 200, 200)); // A light gray g.fillRect(0, 20, 20, 20); g.dispose(); RenderedImage indexed = quantize(image); assertTrue(indexed.getColorModel() instanceof IndexColorModel); IndexColorModel icm = (IndexColorModel) indexed.getColorModel(); assertEquals(4, icm.getMapSize()); // Black background, white fill, // light gray fill, dark gray fill = // 4 colors }
/** * Create default interpolation test. */ public InterpolationTest() { final BandedSampleModel sampleM = new BandedSampleModel(DataBuffer.TYPE_DOUBLE, 3, 3, 1); // final PixelInterleavedSampleModel sampleM = new PixelInterleavedSampleModel(DataBuffer.TYPE_DOUBLE, 3, 3, 1, 3, new int[1]); renderedImage = new TiledImage(-1, -1, 3, 3, -1, -1, sampleM, null); double val = 0; for (int y = -1; y < 2; y++) { for (int x = -1; x < 2; x++) { renderedImage.setSample(x, y, 0, val++); } } pixIterator = PixelIteratorFactory.createDefaultIterator(renderedImage); } }
@Test public void testPlanarImageTranslatedChild() throws Exception { SampleModel sm = new ComponentSampleModel(DataBuffer.TYPE_BYTE, 128, 128, 1, 128, new int[] {0}); TiledImage source = new TiledImage(0, 0, 512, 512, 0, 0, sm, PlanarImage.createColorModel(sm)); Raster[] tiles = source.getTiles(); assertEquals(16, tiles.length); // Without fix for GEOS-8137, this split call will cause a // java.lang.ClassCastException: java.awt.image.Raster cannot be cast to // java.awt.image.WritableRaster MetatileMapOutputFormat.split(key, source); } }
private Band createBand(String name, int dataType, int w, int h, float[] floats, Double noDataValue) { final SampleModel sm = new PixelInterleavedSampleModel(DataBuffer.TYPE_FLOAT, w, h, 1, w, new int[]{0}); final ColorModel cm = PlanarImage.createColorModel(sm); final TiledImage sourceImage = new TiledImage(0, 0, w, h, 0, 0, sm, cm); sourceImage.setData(WritableRaster.createWritableRaster(sm, new DataBufferFloat(floats, w * h), null)); final Band band = new Band(name, dataType, w, h); band.setSourceImage(sourceImage); if (noDataValue != null) { band.setNoDataValueUsed(true); band.setNoDataValue(noDataValue); } return band; } }
private void setSourceImage(Band sourceBand) { final TiledImage sourceImage = new TiledImage(0, 0, sourceBand.getSceneRasterWidth(), sourceBand.getSceneRasterHeight(), 0, 0, new SingleBandedSampleModel(DataBuffer.TYPE_INT, sourceBand.getSceneRasterWidth(), sourceBand.getSceneRasterHeight()), null); sourceImage.setSample(0, 0, 0, 123); sourceImage.setSample(1, 1, 0, 234); sourceImage.setSample(2, 2, 0, 345); sourceImage.setSample(3, 3, 0, 456); sourceBand.setSourceImage(sourceImage); }
/** * Test if iterator transverse expected value in define area. * Area contains all image area. */ @Test public void rectEqualImageWriteWithinReadImageTest() { final Rectangle rect = new Rectangle(10, 10, 5, 2); minx = 0; miny = 0; width = 100; height = 50; tilesWidth = 10; tilesHeight = 5; numBand = 3; setRenderedImgTest(minx, miny, width, height, tilesWidth, tilesHeight, numBand, null); final SampleModel sampleMW = new PixelInterleavedSampleModel(getDataBufferType(), tilesWidth, tilesHeight, numBand, tilesWidth*numBand, new int[]{0, 1, 2}); final WritableRenderedImage rendWriteImage = new TiledImage(rect.x, rect.y, rect.width, rect.height, renderedImage.getTileGridXOffset(), renderedImage.getTileGridYOffset(), sampleMW, null); setPixelIterator(renderedImage, rendWriteImage, rect); while (pixIterator.next()) pixIterator.setSample(1); setPixelIterator(rendWriteImage); while (pixIterator.next()) assertTrue(pixIterator.getSampleDouble() == 1); }
private static Band addBand(Product p, String name, int dataType, Double noDataValue, double scalingFactor) { final int width = p.getSceneRasterWidth(); final int height = p.getSceneRasterHeight(); final SampleModel sm = new PixelInterleavedSampleModel(ImageManager.getDataBufferType(dataType), width, height, 1, width, new int[]{0}); final ColorModel cm = PlanarImage.createColorModel(sm); final TiledImage sourceImage = new TiledImage(0, 0, width, height, 0, 0, sm, cm); final Band band = new Band(name, dataType, width, height); band.setScalingFactor(scalingFactor); if (noDataValue != null) { band.setNoDataValueUsed(true); band.setNoDataValue(noDataValue); } band.setSourceImage(sourceImage); p.addBand(band); return band; } }