/** * Sets every samples in the given image to the given value. This method is typically used for * clearing an image content. * * @param image The image to fill. * @param value The value to to given to every samples. */ public static void fill(final WritableRenderedImage image, final Number value) { int y = image.getMinTileY(); for (int ny = image.getNumYTiles(); --ny >= 0; ) { int x = image.getMinTileX(); for (int nx = image.getNumXTiles(); --nx >= 0; ) { final WritableRaster raster = image.getWritableTile(x, y); try { fill(raster.getDataBuffer(), value); } finally { image.releaseWritableTile(x, y); } } } }
/** * Constructs and returns an instance of WritableRandomIter suitable for iterating over the given bounding rectangle within the given * WritableRenderedImage source. If the bounds parameter is null, the entire image will be used. * * @param im a WritableRenderedImage source. * @param bounds the bounding Rectangle for the iterator, or null. * @return a WritableRandomIter allowing read/write access to the source. */ public static WritableRandomIter createWritable(WritableRenderedImage im, Rectangle bounds) { if (bounds == null) { bounds = new Rectangle(im.getMinX(), im.getMinY(), im.getWidth(), im.getHeight()); } return new WritableRandomIterFallback(im, bounds); }
/** * Update current writable raster from tiles array coordinates. */ @Override protected void updateCurrentRaster(int tileX, int tileY) { super.updateCurrentRaster(tileX, tileY); if (currentWritableRaster != null) writableRenderedImage.releaseWritableTile(prectX, prectY); currentWritableRaster = writableRenderedImage.getWritableTile(tileX, tileY); this.prectX = tileX; this.prectY = tileY; }
if (renderedImage.getMinX() != writableRI.getMinX() || renderedImage.getMinY() != writableRI.getMinY() || renderedImage.getWidth() != writableRI.getWidth() || renderedImage.getHeight() != writableRI.getHeight() || renderedImage.getSampleModel().getNumBands() != writableRI.getSampleModel().getNumBands()) throw new IllegalArgumentException("rendered image and writable rendered image dimensions are not conform.\n" + "First : "+renderedImage+"\nSecond : "+writableRI); final int wrimtx = writableRI.getMinTileX(); final int wrimty = writableRI.getMinTileY(); final int rimtx = writableRI.getMinTileX(); final int rimty = writableRI.getMinTileY(); || renderedImage.getNumXTiles() != writableRI.getNumXTiles() || renderedImage.getNumYTiles() != writableRI.getNumYTiles() || renderedImage.getTileGridXOffset() != writableRI.getTileGridXOffset() || renderedImage.getTileGridYOffset() != writableRI.getTileGridYOffset() || renderedImage.getTileHeight() != writableRI.getTileHeight() || renderedImage.getTileWidth() != writableRI.getTileWidth()) throw new IllegalArgumentException("rendered image and writable rendered image tiles configuration are not conform.\n" + "First : "+renderedImage+"\nSecond : "+writableRI); if (renderedImage.getTile(rimtx, rimty).getDataBuffer().getDataType() != writableRI.getTile(wrimtx, wrimty).getDataBuffer().getDataType()) throw new IllegalArgumentException("rendered image and writable rendered image haven't got same datas type");
final int xmin = image.getMinX(); final int ymin = image.getMinY(); final int width = image.getWidth(); final int height = image.getHeight(); final Rectangle bounds = new Rectangle(xmin, ymin, width, height); if (bounds.isEmpty()) { final int tileXOff = image.getTileGridXOffset(); final int tileYOff = image.getTileGridYOffset(); final int tileWidth = image.getTileWidth(); final int tileHeight = image.getTileHeight(); final int minTileY = image.getMinTileY(); final int maxTileY = image.getNumXTiles() + minTileY - 1; // inclusive. while (!stack.isEmpty()) { final int y = stack.removeLast() + ymin; final int tileX = XToTileX(x, tileXOff, tileWidth); final int tileY = YToTileY(y, tileYOff, tileHeight); final Raster top = (tileY != minTileY) ? image.getTile(tileX, tileY-1) : null; final Raster bottom = (tileY != maxTileY) ? image.getTile(tileX, tileY+1) : null; final WritableRaster raster = image.getWritableTile(tileX, tileY); try { fill(raster, top, bottom, bounds, x, y, oldSamples, newSamples, stack); } finally { image.releaseWritableTile(tileX, tileY);
destination = output; if (output != null) { if (!input.getSampleModel().equals(output.getSampleModel())) { throw new IllegalArgumentException(Resources.format(Resources.Keys.MismatchedSampleModel)); } else if (input.getMinX() != output.getMinX() || input.getMinY() != output.getMinY() || input.getWidth() != output.getWidth() || input.getHeight() != output.getHeight()) } else if (input.getMinTileX() != output.getMinTileX() || input.getMinTileY() != output.getMinTileY() || input.getTileWidth() != output.getTileWidth() || input.getTileHeight() != output.getTileHeight())
final int tileWidth = imageDest.getTileWidth(); final int tileHeight = imageDest.getTileHeight(); final int destMinRastXIndex = imageDest.getMinTileX() + (rectBound.x - imageDest.getMinX()) / tileWidth; final int destMinRastYIndex = imageDest.getMinTileY() + (rectBound.y - imageDest.getMinY()) / tileHeight; final int destMaxRastX = imageDest.getMinTileX() + (rectBound.x + rectBound.width + tileWidth - 1) / tileWidth; final int destMaxRastY = imageDest.getMinTileY() + (rectBound.y + rectBound.height + tileHeight - 1) / tileHeight; final double destY = (py + imageDest.getMinY()) / ((double) stepY); final double destX = (px + imageDest.getMinX()) / ((double) stepX); //-- remonter cette addition pour eviter n *
if (fillValue.length != numBands) throw new IllegalArgumentException("fillValue table length and numbands are different : "+fillValue.length+" numbands = "+this.numBands); assert(numBands == imageDest.getWritableTile(imageDest.getMinTileX(), imageDest.getMinTileY()).getNumBands()) : "destination image numbands different from source image numbands"; this.destIterator = PixelIteratorFactory.createDefaultWriteableIterator(this.imageDest, this.imageDest, resampleArea); destCoords = new double[2]; this.rbc = rbc; this.clamp = getClamp(imageDest.getSampleModel().getDataType());
/** * Releases the tiles acquired by this iterator, if any. * This method does nothing if the iterator is read-only. */ @Override public void close() { if (destination != null && destRaster != null) { destRaster = null; destination.releaseWritableTile(tileX, tileY); } } }
final ImageTypeSpecifier imgTypeSpec = new ImageTypeSpecifier(cm, cm.createCompatibleSampleModel(1, 1)); sourceImg = imgTypeSpec.createBufferedImage(4, 4); final WritableRaster raster = sourceImg.getWritableTile(0, 0); InterpolationCase.BICUBIC, ResampleBorderComportement.FILL_VALUE, new double[]{0}); resample.fillImage(); final Raster coverageRaster = targetImage.getTile(0, 0);
/** * Fetches from the image a tile for the current {@link #tileX} and {@link #tileY} coordinates. * All fields prefixed by {@code current} are updated by this method. This method also updates * the {@link #y} field, but caller is responsible for updating the {@link #x} field. */ private void fetchTile() { currentRaster = null; if (destination != null) { destRaster = destination.getWritableTile(tileX, tileY); if (destination == image) { currentRaster = destRaster; } } if (currentRaster == null) { currentRaster = image.getTile(tileX, tileY); } final int minX = currentRaster.getMinX(); final int minY = currentRaster.getMinY(); currentLowerX = Math.max(lowerX, minX); y = Math.max(lowerY, minY); currentUpperX = Math.min(upperX, minX + tileWidth); currentUpperY = Math.min(upperY, minY + tileHeight); if (currentRaster.getNumBands() != numBands) { throw new RasterFormatException(Resources.format(Resources.Keys.IncompatibleTile_2, tileX, tileY)); } }
/** * Constructs a new instance of {@code DeferredPlanarImage}. * * @param source The source image. */ public DeferredPlanarImage(final RenderedImage source) { super(new ImageLayout(source), toVector(source), null); image = getSourceImage(0); image.addTileComputationListener(this); if (image instanceof WritableRenderedImage) { ((WritableRenderedImage) image).addTileObserver(this); } delay = (int)Math.min((((long)DELAY) * (tileWidth*tileHeight) / 1000000), DELAY); }
if (renderedImage.getSampleModel().getNumBands() != writableRI.getSampleModel().getNumBands()) throw new IllegalArgumentException("renderedImage and writableRenderedImage haven't got same band number"); final int riMinX = renderedImage.getMinX(); final int wrimtx = writableRI.getMinTileX(); final int wrimty = writableRI.getMinTileY(); if (renderedImage.getTile(rimtx, rimty).getDataBuffer().getDataType() != writableRI.getTile(wrimtx, wrimty).getDataBuffer().getDataType()) throw new IllegalArgumentException("rendered image and writable rendered image haven't got same datas type"); if (renderedImage.getTileHeight() != writableRI.getTileHeight() || renderedImage.getTileWidth() != writableRI.getTileWidth() || renderedImage.getTileGridXOffset() != writableRI.getTileGridXOffset() || renderedImage.getTileGridYOffset() != writableRI.getTileGridYOffset()) throw new IllegalArgumentException("rendered image and writable rendered image tiles configuration are not conform"+renderedImage+writableRI); if (writableRI.getMinX() != areaIterateMinX //areaiteration || writableRI.getMinY() != areaIterateMinY //areaiteration || writableRI.getWidth() != areaIterateMaxX-areaIterateMinX//longueuriteration || writableRI.getHeight()!= areaIterateMaxY-areaIterateMinY//largeuriteration || !minTileX || !minTileY ) if (renderedImage.getMinX() != writableRI.getMinX() || renderedImage.getMinY() != writableRI.getMinY() || renderedImage.getWidth() != writableRI.getWidth() || renderedImage.getHeight() != writableRI.getHeight() || rimtx != wrimtx || rimty != wrimty || renderedImage.getNumXTiles() != writableRI.getNumXTiles() || renderedImage.getNumYTiles() != writableRI.getNumYTiles())
/** * {@inheritDoc }. */ @Override protected void updateCurrentRaster(int tileX, int tileY) { super.updateCurrentRaster(tileX, tileY); if (currentWritableRaster != null) writableRenderedImage.releaseWritableTile(prectX, prectY); this.currentWritableRaster = writableRenderedImage.getWritableTile(tileX, tileY); prectX = tileX; prectY = tileY; }
if (fillValue.length != numBands) throw new IllegalArgumentException("fillValue table length and numbands are different : "+fillValue.length+" numbands = "+this.numBands); assert(numBands == imageDest.getWritableTile(imageDest.getMinTileX(), imageDest.getMinTileY()).getNumBands()) : "destination image numbands different from source image numbands"; this.destIterator = PixelIteratorFactory.createDefaultWriteableIterator(this.imageDest, this.imageDest, resampleArea); this.clamp = getClamp(imageDest.getSampleModel().getDataType());
/** * {@inheritDoc }. */ @Override public void close() { writableRenderedImage.releaseWritableTile(prectX, prectY); super.close(); } }
final ImageTypeSpecifier imgTypeSpec = new ImageTypeSpecifier(cm, cm.createCompatibleSampleModel(1, 1)); sourceImg = imgTypeSpec.createBufferedImage(4, 4); final WritableRaster raster = sourceImg.getWritableTile(0, 0); final Raster coverageRaster = targetImage.getTile(0, 0);
public ResampleTest() { final ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY); final ColorModel cm = new ComponentColorModel(cs, new int[]{Double.SIZE}, false, false, Transparency.OPAQUE, DataBuffer.TYPE_DOUBLE); final ImageTypeSpecifier imgTypeSpec = new ImageTypeSpecifier(cm, cm.createCompatibleSampleModel(1, 1)); sourceImg = imgTypeSpec.createBufferedImage(3, 3); final WritableRaster raster = sourceImg.getWritableTile(0, 0); raster.setSample(0, 0, 0, 1); raster.setSample(1, 0, 0, 1); raster.setSample(2, 0, 0, 1); raster.setSample(0, 1, 0, 1); raster.setSample(1, 1, 0, 2); raster.setSample(2, 1, 0, 1); raster.setSample(0, 2, 0, 1); raster.setSample(1, 2, 0, 1); raster.setSample(2, 2, 0, 1); }
/** * Constructs a new instance of {@code DeferredPlanarImage}. * * @param source The source image. */ public DeferredPlanarImage(final RenderedImage source) { super(new ImageLayout(source), toVector(source), null); image = getSourceImage(0); image.addTileComputationListener(this); if (image instanceof WritableRenderedImage) { ((WritableRenderedImage) image).addTileObserver(this); } delay = (int) Math.min(DELAY * tileWidth * tileHeight / 1000000, DELAY); }
/** * Constructs and returns an instance of WritableRandomIter suitable for iterating over the given bounding rectangle within the given * WritableRenderedImage source. If the bounds parameter is null, the entire image will be used. * * @param im a WritableRenderedImage source. * @param bounds the bounding Rectangle for the iterator, or null. * @return a WritableRandomIter allowing read/write access to the source. */ public static WritableRandomIter createWritable(WritableRenderedImage im, Rectangle bounds) { if (bounds == null) { bounds = new Rectangle(im.getMinX(), im.getMinY(), im.getWidth(), im.getHeight()); } return new WritableRandomIterFallback(im, bounds); }