Rectangle union = new Rectangle(PlanarImage.wrapRenderedImage(sources[0]).getBounds()); boolean performMosaic = false; for (int i = 1; i < sources.length; i++) { Rectangle currentExtent = PlanarImage.wrapRenderedImage(sources[0]).getBounds(); if (!currentExtent.equals(union)) { performMosaic = true; union = union.union(currentExtent); if (border) { if (!PlanarImage.wrapRenderedImage(sources[i]).getBounds().equals(union)) { PlanarImage.wrapRenderedImage(sources[0]).getBounds(); new ImageWorker(sources[i]).setRenderingHints(hints); worker.border( union.x - currentExtent.x, union.x + union.width - currentExtent.x - currentExtent.width,
throws IOException { final SampleModel sm = image.getSampleModel(); final ColorModel cm = image.getColorModel(); final int numBands = sm.getNumBands(); final GridSampleDimension[] bands = new GridSampleDimension[numBands];
try { final MathTransform2D transform = gridGeometry.getGridToCRS2D(PixelOrientation.UPPER_LEFT); toGrid = transform.inverse(); } catch (NoninvertibleTransformException exception) { this.left = left; final int x = image.getMinX(); final int y = image.getMinY(); this.xmax = x + image.getWidth(); this.ymax = y + image.getHeight(); bounds = new Rectangle(0, 0, interpolation.getWidth(), interpolation.getHeight()); if (hasROI) { roi = roiProp; roiBounds = roi.getBounds();
private RenderedImage getImageFromParentCoverage(GridCoverage2D parentCoverage) { if (parentCoverage == null) { return null; } RenderedImage ri = parentCoverage.getRenderedImage(); if (ri != null) { PlanarImage pi = PlanarImage.wrapRenderedImage(ri); pi.setProperty(PARENT_COVERAGE_PROPERTY, parentCoverage); ri = pi; } return ri; }
/** * Disposes only the {@linkplain #image}, not the views. This method is invoked by {@link * ViewsManager#dispose}. This method checks the set of every sinks, which may or may not be * {@link RenderedImage}s. If there is no sinks, we can process. */ final synchronized boolean disposeImage(final boolean force) { if (!force) { Collection<?> sinks = image.getSinks(); if (sinks != null && !sinks.isEmpty()) { return false; } } image.dispose(); return true; }
/** * Forces the image to start in the origin and have a rgb/rbga/gray/gray+alpha structure * * @param image1 * @return */ private RenderedImage normalizeImage(RenderedImage image1) { image1 = new ImageWorker(image1) .forceColorSpaceRGB() .forceComponentColorModel() .getRenderedImage(); if (image1.getMinX() != 0 || image1.getMinY() != 0) { image1 = PlanarImage.wrapRenderedImage(image1).getAsBufferedImage(); } return image1; }
Object property = src.getProperty("ROI"); if (property == null || property.equals(java.awt.Image.UndefinedProperty) if (srcROI.getBounds().isEmpty()) { return java.awt.Image.UndefinedProperty; && ((GeometricOpImage) dst).getBorderExtender() == null) { srcBounds = new Rectangle( src.getMinX() + interp.getLeftPadding(), src.getMinY() + interp.getTopPadding(), src.getWidth() - interp.getWidth() + 1, src.getHeight() - interp.getHeight() + 1); } else { srcBounds = new Rectangle( src.getMinX(), src.getMinY(), src.getWidth(), src.getHeight()); if (!srcBounds.contains(srcROI.getBounds())) { srcROI = srcROI.intersect(new ROIShape(srcBounds)); PlanarImage.wrapRenderedImage(new WarpRIF().create(paramBlk, localHints)); ROI dstROI = new ROI(roiImage, 1);
sourceArea.grow(2, 2); .format(raster.getSampleModel().getDataType()) PlanarImage pi = PlanarImage.wrapRenderedImage(raster); if (!transformed.intersects(pi.getBounds())) { return null; pi.setProperty("ROI", transformed); if (pi instanceof RenderedOp) { theImage.setProperty("ROI", transformed); finalRaster2Model, CoverageUtilities.AFFINE_IDENTITY_EPS)) { if (noData != null) { PlanarImage t = PlanarImage.wrapRenderedImage(raster); t.setProperty(NoDataContainer.GC_NODATA, noData); raster = t; PlanarImage t = PlanarImage.wrapRenderedImage(renderedImage); t.setProperty(NoDataContainer.GC_NODATA, new NoDataContainer(iw.getNoData())); renderedImage = t; } else if (this.noData != null) { PlanarImage t = PlanarImage.wrapRenderedImage(renderedImage); t.setProperty(NoDataContainer.GC_NODATA, noData); renderedImage = t;
final Rectangle mapRasterArea = new Rectangle(0, 0, mapWidth, mapHeight); final AffineTransform worldToScreen = RendererUtilities.worldToScreenTransform(mapEnvelope, mapRasterArea); !sameCRS || !(interpolation instanceof InterpolationNearest); if (!needsGutter) { readGG = new GridGeometry2D(new GridEnvelope2D(mapRasterArea), mapEnvelope); new GridGeometry2D( new GridEnvelope2D(bufferedTargetArea), PixelInCell.CELL_CORNER, final Rectangle imageBounds = PlanarImage.wrapRenderedImage(image).getBounds(); ColorModel cm = image.getColorModel(); double[] bgValues = null; final ImageWorker worker = new ImageWorker(image); final int transparencyType = cm.getTransparency(); if (transparent && !image.getColorModel().hasAlpha()) { alphaChannels = new PlanarImage[] {PlanarImage.wrapRenderedImage(alpha)}; alphaChannels = new PlanarImage[] {PlanarImage.wrapRenderedImage(alpha)}; alphaChannels = new PlanarImage[] {PlanarImage.wrapRenderedImage(alpha)};
int destNoData) { assertEquals(indexed.getMinX(), image.getMinX()); assertEquals(indexed.getMinY(), image.getMinY()); assertEquals(indexed.getWidth(), image.getWidth()); assertEquals(indexed.getHeight(), image.getHeight()); PlanarImage.wrapRenderedImage(indexed).getTiles(); return; Rectangle roiBounds = null; if (roiExists) { PlanarImage roiIMG = roi.getAsImage(); roiIter = RandomIterFactory.create(roiIMG, null, true, true); roiBounds = roi.getBounds(); int limx = minX - image.getTileGridXOffset(); int limy = minY - image.getTileGridYOffset(); Rectangle translated = new Rectangle(limx, limy, w, h); if (roiExists && !(roiBounds.contains(x, y) && roiIter.getSample(x, y, 0) > 0) && translated.contains(x, y)) { valid = false;
SampleModel sModel = source.getSampleModel(); // source sample model if (sampleModel.getTransferType() != lookupTable.getDataType() || sampleModel.getNumBands() != lookupTable.getDestNumBands(sModel.getNumBands())) { srcROIImage = srcROI.getAsImage(); Rectangle srcRect = new Rectangle(source.getMinX(), source.getMinY(), source.getWidth(), source.getHeight()); Rectangle roiBounds = srcROIImage.getBounds(); int deltaX0 = (roiBounds.x - srcRect.x); int leftP = deltaX0 > 0 ? deltaX0 : 0;
public void testTranslation(boolean useROIAccessor, int dataType, double xScale, double yScale, double xTrans, double yTrans, byte imageValue, Interpolation interpolation) { RenderedImage testIMG = createTestImage(dataType, DEFAULT_WIDTH, DEFAULT_HEIGHT, imageValue, false); PlanarImage testImgWithROI = PlanarImage.wrapRenderedImage(testIMG); testImgWithROI.setProperty("roi", new ROIShape(new Rectangle(0, 0, DEFAULT_WIDTH / 2, DEFAULT_HEIGHT / 2))); // Scaled images RenderedOp scaleImgNear = Scale2Descriptor.create(testImgWithROI, xScale, yScale, xTrans, yTrans, interpolation, null, useROIAccessor, null, null, null); scaleImgNear.getTiles(); // verify the translate int optimization, and that assertThat(scaleImgNear.getRendering(), instanceOf(TranslateIntOpImage.class)); Object roi = scaleImgNear.getProperty("roi"); assertThat(roi, instanceOf(ROI.class)); assertThat(((ROI) roi).getAsImage(), instanceOf(TranslateIntOpImage.class)); double actualX=scaleImgNear.getMinX(); double actualY=scaleImgNear.getMinY(); double expectedX = testIMG.getMinX() + xTrans; double expectedY = testIMG.getMinY() + yTrans; double tolerance = 0.1f; assertEquals(expectedX, actualX, tolerance); assertEquals(expectedY, actualY, tolerance); // Final Image disposal if (scaleImgNear instanceof RenderedOp) { ((RenderedOp) scaleImgNear).dispose(); } }
dataType = image0.getSampleModel().getDataType(); DefaultMultiLevelModel model = new DefaultMultiLevelModel(levelCount, new AffineTransform(), new Rectangle(image0.getWidth(), image0.getHeight())); MultiLevelSource multiLevelSource = new DefaultMultiLevelSource(image0, model, interpolation); final PlanarImage image = PlanarImage.wrapRenderedImage(multiLevelSource.getImage(level)); final int width = image.getWidth(); final int height = image.getHeight(); System.out.println("tileWidth = " + tileWidth + ", tileHeight = " + tileHeight); System.out.println("numXTiles = " + numXTiles + ", numYTiles = " + numYTiles); if (numXTiles * tileWidth == width && numYTiles * tileHeight == image.getHeight()) { break;
if (finalRasterArea.equals(sourceGridRange) && isSimpleTransform && cropROI == null) return sourceCoverage; ImageWorker worker = new ImageWorker(); java.awt.Polygon rasterSpaceROI = null; double[] background = roiarr = new ROI[] {roi}; if (roiarr != null && roiarr[0].getBounds().isEmpty()) { throw new CannotCropException(Errors.format(ErrorKeys.CANT_CROP)); worker.setBackground(background); worker.setNoData(nodata); Map sourceProperties = sourceCoverage.getProperties(); Map properties = null; if (sourceProperties != null && !sourceProperties.isEmpty()) { finalROI = finalROI.intersect(internalROI); } else if (internalROI != null) { finalROI = internalROI; new GridGeometry2D( new GridEnvelope2D(croppedImage.getBounds()), sourceGridGeometry.getGridToCRS2D(PixelOrientation.CENTER),
final ImageWorker imageWorker = new ImageWorker(mosaic); hints = prepareHints(hints); imageWorker.setRenderingHints(hints); if (!imageWorker.isColorSpaceGRAYScale()) { if (!imageWorker.isColorSpaceRGB()) { imageWorker.forceColorSpaceRGB(); if (imageWorker.getRenderedImage().getColorModel().hasAlpha()) { .getRenderedImage(); imageWorker.retainBands(mosaic.getColorModel().getNumColorComponents()); imageWorker.addBand(maskedAlpha, false, true, null); } else { final ImageWorker roiImageWorker = new ImageWorker(overallROI.getAsImage()); roiImageWorker.setRenderingHints(hints); .retainFirstBand() .getPlanarImage(); if (!alpha.getBounds().equals(imageWorker.getPlanarImage().getBounds())) { mosaic.getMinX(), mosaic.getMinY(), mosaic.getWidth(),
final WritableRaster wTile = WritableRaster.createWritableRaster( pImage.getSampleModel() .createCompatibleSampleModel(tileWidth, tileHeight), new Point(x, y)); Rectangle sourceArea = new Rectangle(x, y, tileWidth, tileHeight); sourceArea = sourceArea.intersection(pImage.getBounds()); pImage.copyData(wTile); if (wTile.getMinX() != 0 || wTile.getMinY() != 0) { tile = new BufferedImage( pImage.getColorModel(), (WritableRaster) wTile.createTranslatedChild(0, 0), pImage.getColorModel().isAlphaPremultiplied(), null); } else { tile = new BufferedImage( pImage.getColorModel(), wTile, pImage.getColorModel().isAlphaPremultiplied(), null);
try { final int width = raster.getWidth(); final int height = raster.getHeight(); Rectangle imgBounds = new Rectangle(raster.getMinX(), raster.getMinY(), width, height); Rectangle sourceArea = imageReadParam.getSourceRegion(); PlanarImage pi = PlanarImage.wrapRenderedImage(raster); if (!transformed.intersects(pi.getBounds())) { if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine( pi.setProperty("ROI", transformed); raster = PlanarImage.wrapRenderedImage( footprintBehavior.postProcessMosaic(raster, transformed, hints)); final int ssWidth = raster.getWidth(); final int ssHeight = raster.getHeight(); if (LOGGER.isLoggable(Level.FINE)) { LOGGER.log(
.create( "name", PlanarImage.wrapRenderedImage(getSynthetic(Double.NaN)), envelope, new GridSampleDimension[] { DefaultGeographicCRS.WGS84, ReferencedEnvelope.reference(envelope), new Rectangle(0, 0, 50, 50), gtoem.createAffineTransform().createInverse()); renderer.renderImage(gc, rs, new InterpolationBilinear(), null, 256, 256); assertNotNull(image); assertNotNull(PlanarImage.wrapRenderedImage(image)); assertTrue(image.getColorModel() instanceof IndexColorModel); assertNotNull(PlanarImage.wrapRenderedImage(image)); assertTrue(image.getColorModel() instanceof IndexColorModel);
&& granule.getColorModel() instanceof IndexColorModel) { granule = new ImageWorker(granule).forceComponentColorModel().getRenderedImage(); .makeColorTransparent(inputTransparentColor) .getRenderedImage(); granuleHasAlpha = granule.getColorModel().hasAlpha(); if (!granule.getColorModel().hasAlpha()) { int[] alphaIndex = new int[] {granule.getColorModel().getNumComponents() - 1}; assert alphaIndex[0] < granule.getSampleModel().getNumBands(); || rasterLayerResponse.isHeterogeneousCRS() || !JAIExt.isJAIExtOperation("Mosaic")) { final Rectangle bounds = PlanarImage.wrapRenderedImage(granule).getBounds(); Geometry mask = JTS.toGeometry( new Envelope( bounds.getMinX(), bounds.getMaxX(), bounds.getMinY(), bounds.getMaxY())); imageROI = new ROIGeometry(mask); if (imageROI.contains(footprint.getBounds2D().getBounds())) { imageROI = footprint; } else { imageROI = imageROI.intersect(footprint);
if (targetGG != null && targetGG.isDefined(GridGeometry2D.CRS_BITMASK)) { return targetCoverage; PlanarImage sourceImage = PlanarImage.wrapRenderedImage(sourceCoverage.getRenderedImage()); || (allSteps instanceof AffineTransform && XAffineTransform.isIdentity((AffineTransform) allSteps, EPS))) { sourceImage = PlanarImage.wrapRenderedImage(sourceCoverage.getRenderedImage()); w.setImage(sourceImage); if (targetBB.equals(sourceBB)) { sourceImage = PlanarImage.wrapRenderedImage(sourceCoverage.getRenderedImage()); return create( sourceCoverage, sourceImage, targetGG, null, null, hints, sourceProps); if (sourceBB.contains(targetBB)) { switch (sourceImage.getSampleModel().getTransferType()) { case DataBuffer.TYPE_DOUBLE: case DataBuffer.TYPE_FLOAT: .getName() .getCode(), /* {2} */ sourceImage.getWidth(), /* {3} */ sourceImage.getHeight(),