/** * Makes sure the image starts at 0,0, all images coming from files do but the ones coming from * a JAI chain might not * * @param image * @return */ static final RenderedImage realignImage(RenderedImage image) { if (image.getMinX() > 0 || image.getMinY() > 0) { return new BufferedImage( image.getColorModel(), ((WritableRaster) image.getData()).createWritableTranslatedChild(0, 0), image.getColorModel().isAlphaPremultiplied(), null); } else { return image; } } }
/** * Constructs multi-dimensional grid envelope defined by a {@link RenderedImage}. The two first * dimensions are set to the [{@linkplain RenderedImage#getMinX x} .. x+{@linkplain * RenderedImage#getWidth width}-1] and [{@linkplain RenderedImage#getMinY y} .. y+{@linkplain * RenderedImage#getHeight height}-1] inclusive ranges respectively. Extra dimensions (if any) * are set to the [0..0] inclusive range. * * <p>Notice that this method ensure interoperability between {@link Raster} dimensions in * Java2D style and {@link GridEnvelope} dimensions in ISO 19123 style providing that the user * remember to add 1 to the {@link GridEnvelope#getHigh(int)} values. * * @param image The image for which to construct a grid envelope. * @param dimension Number of dimensions for this grid envelope. Must be equals or greater than * 2. */ public GeneralGridEnvelope(final RenderedImage image, final int dimension) { this(image.getMinX(), image.getMinY(), image.getWidth(), image.getHeight(), dimension); }
/** * 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; }
/** * Computes the sub-mosaic spatial extend based on the image size and the target grid to world * transformation * * @param mosaicProducer * @param image * @return * @throws FactoryException */ private ReferencedEnvelope computeSubmosaicBoundingBox( MathTransform2D tx, RenderedImage image, CoordinateReferenceSystem crs) throws FactoryException { double[] mosaicked = new double[] { image.getMinX(), image.getMinY(), image.getMinX() + image.getWidth(), image.getMinY() + image.getHeight() }; try { tx.transform(mosaicked, 0, mosaicked, 0, 2); } catch (TransformException e) { throw new FactoryException(e); } ReferencedEnvelope submosaicBBOX = new ReferencedEnvelope(mosaicked[0], mosaicked[2], mosaicked[1], mosaicked[3], crs); return submosaicBBOX; }
/** * Implementation helper: converts a RenderedImage to an Image */ protected Image renderedImageToImage(RenderedImage ri) { int x = ri.getMinX(); int y = ri.getMinY(); SampleModel sm = ri.getSampleModel(); ColorModel cm = ri.getColorModel(); WritableRaster wr = Raster.createWritableRaster(sm, new Point(x,y)); ri.copyData(wr); return new BufferedImage(cm, wr, cm.isAlphaPremultiplied(), null); }
private ROI getImageBoundsROI(RenderedImage image) { final int minX = image.getMinX(); final int minY = image.getMinY(); final int maxX = minX + image.getWidth(); final int maxY = minY + image.getHeight(); LiteCoordinateSequence cs = new LiteCoordinateSequence( minX, minY, maxX, minY, maxX, maxY, minX, maxY, minX, minY); Geometry footprint = new GeometryFactory().createPolygon(cs); return new ROIGeometry(footprint); }
/** * Implementation helper: converts a RenderedImage to an Image */ protected Image renderedImageToImage(RenderedImage ri) { int x = ri.getMinX(); int y = ri.getMinY(); SampleModel sm = ri.getSampleModel(); ColorModel cm = ri.getColorModel(); WritableRaster wr = Raster.createWritableRaster(sm, new Point(x,y)); ri.copyData(wr); return new BufferedImage(cm, wr, cm.isAlphaPremultiplied(), null); }
/** * Constructs an <code>RasterLayout</code> with all its parameters set to equal those of a given * <code>RenderedImage</code>. * * @param im a <code>RenderedImage</code> whose layout will be copied. */ public RasterLayout(RenderedImage im) { this( im.getMinX(), im.getMinY(), im.getWidth(), im.getHeight(), im.getTileGridXOffset(), im.getTileGridYOffset(), im.getTileWidth(), im.getTileHeight()); }
/** * Implementation helper: converts a RenderedImage to an Image */ protected Image renderedImageToImage(RenderedImage ri) { int x = ri.getMinX(); int y = ri.getMinY(); SampleModel sm = ri.getSampleModel(); ColorModel cm = ri.getColorModel(); WritableRaster wr = Raster.createWritableRaster(sm, new Point(x,y)); ri.copyData(wr); return new BufferedImage(cm, wr, cm.isAlphaPremultiplied(), null); }
/** * Post processes a blank image response, eventually making it transparent * * @param finalImage * @return */ public RenderedImage postProcessBlankResponse(RenderedImage finalImage, RenderingHints hints) { // prepare a ROI made of only zeroes ImageLayout layout = new ImageLayout( finalImage.getMinX(), finalImage.getMinY(), finalImage.getWidth(), finalImage.getHeight()); RenderedOp roi = ConstantDescriptor.create( (float) finalImage.getWidth(), (float) finalImage.getHeight(), new Byte[] {0}, new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout)); ImageWorker iw = new ImageWorker(finalImage); iw.setROI(new ROI(roi)); return iw.getRenderedImage(); } }
/** * Makes sure the image starts at 0,0, all images coming from files do but the ones * coming from a JAI chain might not * @param image * @return */ static final RenderedImage realignImage(RenderedImage image) { if (image.getMinX() > 0 || image.getMinY() > 0) { return new BufferedImage(image.getColorModel(), ((WritableRaster) image.getData()).createWritableTranslatedChild(0, 0), image .getColorModel().isAlphaPremultiplied(), null); } else { return image; } }
/** * Draws a RenderedImage on the EPS document. */ public void drawRenderedImage(RenderedImage img, AffineTransform xform) { Hashtable properties = new Hashtable(); String[] names = img.getPropertyNames(); for (int i = 0; i < names.length; i++) { properties.put(names[i], img.getProperty(names[i])); } ColorModel cm = img.getColorModel(); WritableRaster wr = img.copyData(null); BufferedImage img1 = new BufferedImage(cm, wr, cm.isAlphaPremultiplied(), properties); AffineTransform at = AffineTransform.getTranslateInstance(img.getMinX(), img.getMinY()); at.preConcatenate(xform); drawImage(img1, at, null); }
private GridCoverage2D createCoverageFromElement( MosaicElement mosaicElement, GridCoverageFactory factory, ReferencedEnvelope submosaicBBOX) { RenderedImage image = mosaicElement.getSource(); Object roiProperty = image.getProperty("ROI"); if (!(roiProperty instanceof ROI)) { // need the ROI before warp, as the area of validity needs to be warped along, so // if missing add one now ROIGeometry roi = new ROIGeometry( JTS.toGeometry( new Envelope( image.getMinX(), image.getMinX() + image.getWidth(), image.getMinY(), image.getMinY() + image.getHeight()))); ImageWorker iw = new ImageWorker(image); iw.setROI(roi); image = iw.getRenderedImage(); roiProperty = roi; } // move the property at the coverage level too Map<String, Object> properties = new HashMap<>(); CoverageUtilities.setROIProperty(properties, (ROI) roiProperty); return factory.create("submosaic", image, submosaicBBOX, null, null, properties); }