public static RenderedOp create(RenderedImage source0, FillType type, RenderingHints hints) { ParameterBlockJAI pb = new ParameterBlockJAI("TransparencyFill", RenderedRegistryMode.MODE_NAME); pb.setSource("source0", source0); pb.setParameter("type", type); return JAI.create("TransparencyFill", pb, hints); } }
RenderedImage image = (sourceCoverage).getRenderedImage(); final ImageWorker worker = new ImageWorker(image); if (image.getColorModel() instanceof IndexColorModel && (image.getSampleModel().getNumBands() > 1)) { worker.retainBands(1); image = worker.getRenderedImage(); if (image.getColorModel() instanceof DirectColorModel) { worker.forceComponentColorModel(); image = worker.getRenderedImage(); final ParameterBlockJAI pbjImageWrite = new ParameterBlockJAI("ImageWrite"); pbjImageWrite.addSource(image); pbjImageWrite.setParameter("Output", outstream); pbjImageWrite.setParameter("VerifyOutput", Boolean.FALSE); pbjImageWrite.setParameter("Format", extension); JAI.create("ImageWrite", pbjImageWrite); outstream.flush(); outstream.close();
/** * Stop gap measure to get a ROI that can scale up to massive images, until ROIGeometry gets * fixed to be a good ROIShape replacement * * @param theGeom * @return */ private static ROI getAsROI(Geometry theGeom) { org.locationtech.jts.geom.Envelope env = theGeom.getEnvelopeInternal(); int x = (int) Math.floor(env.getMinX()); int y = (int) Math.floor(env.getMinY()); int w = (int) Math.ceil(env.getMaxX()) - x; int h = (int) Math.ceil(env.getMaxY()) - y; ParameterBlockJAI pb = new ParameterBlockJAI("VectorBinarize"); pb.setParameter("minx", x); pb.setParameter("miny", y); pb.setParameter("width", w); pb.setParameter("height", h); pb.setParameter("geometry", PreparedGeometryFactory.prepare(theGeom)); pb.setParameter("antiAliasing", true); RenderedImage roiImage = JAI.create("VectorBinarize", pb, null); return new ROI(roiImage); } }
private RenderedImage mosaicHeterogeneousImages(List<ImageInTile> sources) { // at the time of writing, only JAI-EXT mosaic can handle a mix of different // color models, we need to use it explicitly RenderedImage image; final ParameterBlockJAI pb = new ParameterBlockJAI(new it.geosolutions.jaiext.mosaic.MosaicDescriptor()); for (ImageInTile it : sources) { if (it.posx != 0 || it.posy != 0) { ImageWorker iw = new ImageWorker(it.image); iw.translate( it.posx, it.posy, Interpolation.getInstance(Interpolation.INTERP_NEAREST)); RenderedImage translated = iw.getRenderedImage(); pb.addSource(translated); } else { pb.addSource(it.image); } } pb.setParameter("mosaicType", MosaicDescriptor.MOSAIC_TYPE_OVERLAY); pb.setParameter("sourceAlpha", null); pb.setParameter("sourceROI", null); pb.setParameter("sourceThreshold", null); pb.setParameter("backgroundValues", new double[] {0}); pb.setParameter("nodata", null); RenderingHints hints = new Hints(JAI.getDefaultInstance().getRenderingHints()); hints.putAll(GeoTools.getDefaultHints()); image = new MosaicRIF().create(pb, hints); return image; }
BandTransform[] sourceBandTransforms, RenderingHints renderingHints) { ParameterBlockJAI pb = new ParameterBlockJAI("Jiffle", RenderedRegistryMode.MODE_NAME); pb.addSource(sources[i]); pb.setParameter(SOURCE_NAMES, sourceImageNames); pb.setParameter(DEST_NAME, destName); pb.setParameter(SCRIPT, script); pb.setParameter(DEST_BOUNDS, destBounds); pb.setParameter(DEST_TYPE, destType); pb.setParameter(SRC_COORDINATE_TRANSFORMS, sourceCoordinateTransforms); pb.setParameter(SRC_BAND_TRANSFORMS, sourceBandTransforms); return JAI.create("Jiffle", pb, renderingHints);
lookupImg = createConstantImage(dataImg.getWidth(), dataImg.getHeight(), Integer.valueOf(0)); pb = new ParameterBlockJAI("Lookup"); pb.setSource("source0", lookupImg); pb.setParameter("table", new LookupTableJAI(lookup, offset)); RenderedOp displayImg = JAI.create("Lookup", pb);
ParameterBlockJAI pbj = new ParameterBlockJAI("ColorConvert"); pbj.addSource(image); pbj.setParameter("colorModel", getNotJAICm()); RenderedOp finalimage = JAI.create("ColorConvert", pbj); ROI roi = new ROIShape(new Rectangle(image.getMinX() + 5, image.getMinY() + 5, image.getWidth() / 4, image.getHeight() / 4)); pbj = new ParameterBlockJAI("ColorConvert"); pbj.addSource(image); pbj.setParameter("colorModel", getNotJAICm()); pbj.setParameter("roi", roi); finalimage = JAI.create("ColorConvert", pbj); pbj = new ParameterBlockJAI("ColorConvert"); pbj.addSource(image); pbj.setParameter("colorModel", getNotJAICm()); pbj.setParameter("nodata", nodata); finalimage = JAI.create("ColorConvert", pbj); pbj = new ParameterBlockJAI("ColorConvert"); pbj.addSource(image); pbj.setParameter("colorModel", getNotJAICm()); pbj.setParameter("roi", roi); pbj.setParameter("nodata", nodata); finalimage = JAI.create("ColorConvert", pbj);
} else if (band < 0 || band >= coverage.getNumSampleDimensions()) { throw new ProcessException("Invalid input, invalid band number:" + band); coverage.getGridGeometry().getGridToCRS2D(PixelOrientation.UPPER_LEFT); final RenderedImage raster = coverage.getRenderedImage(); ParameterBlockJAI pb = new ParameterBlockJAI("Vectorize"); pb.setSource("source0", raster); pb.setParameter("roi", CoverageUtilities.prepareROI(roi, mt2D)); pb.setParameter("band", band); pb.setParameter("outsideValues", outsideValues); if (insideEdges != null) { pb.setParameter("insideEdges", insideEdges); final RenderedOp dest = JAI.create("Vectorize", pb); @SuppressWarnings("unchecked") final Collection<Polygon> prop =
/** * This method has the objective of untiling the final image to write on * disk since we do not want to have tiles added to the file on disk causing * failures when reading it back into memory. * * @param image * Image to untile. * * @return Untiled image. */ private PlanarImage untileImage(RenderedImage image) { final ParameterBlockJAI pbj = new ParameterBlockJAI("format"); pbj.addSource(image); pbj.setParameter("dataType", image.getSampleModel().getTransferType()); final ImageLayout layout = new ImageLayout(image); layout.unsetTileLayout(); layout.setTileGridXOffset(0); layout.setTileGridYOffset(0); layout.setTileHeight(image.getHeight()); layout.setTileWidth(image.getWidth()); layout.setValid(ImageLayout.TILE_GRID_X_OFFSET_MASK | ImageLayout.TILE_GRID_Y_OFFSET_MASK | ImageLayout.TILE_HEIGHT_MASK | ImageLayout.TILE_WIDTH_MASK); final RenderingHints hints = new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout); // avoid caching this image return JAI.create("format", pbj, hints); }
final PlanarImage inputImage = (PlanarImage) inputCoverage.getRenderedImage(); ParameterBlockJAI parameterBlock = new ParameterBlockJAI("transpose", "rendered"); parameterBlock.addSource(inputImage); parameterBlock.setParameter("type", TransposeDescriptor.FLIP_VERTICAL); PlanarImage outputImage = JAI.create("transpose", parameterBlock); final int numBands = inputCoverage.getNumSampleDimensions(); return createGridCoverage(inputCoverage.getName(), outputImage); } else { GridSampleDimension[] bands = inputCoverage.getSampleDimensions();
JAI jai = JAI.getDefaultInstance(); jai.getTileCache().setMemoryCapacity(1024l * 1024 * 1024); RenderedImage nir = readImage(new File(basePath + "B08.tif")); ParameterBlockJAI pb = new ParameterBlockJAI("Jiffle"); String script = "n = nir; r = red; res = (n - r) / (n + r);"; // HERE IS THE NDVI SCRIPT! 5.5 seconds! pb.setParameter("script", script); pb.setParameter("destName", "res"); pb.setParameter("sourceNames", new String[] {"red", "nir"}); pb.setParameter("destType", DataBuffer.TYPE_FLOAT); pb.addSource(red); pb.addSource(nir); RenderedOp op = JAI.create("Jiffle", pb); final double pixels = (double) red.getWidth() * (double) red.getHeight(); System.out.println( "Computing " + NumberFormat.getNumberInstance().format(pixels) + " pixels");
RenderedImage sourceImage = coverage.getRenderedImage(); final int numBands = sourceImage.getSampleModel().getNumBands(); if (band < 0 || band >= numBands) { throw new ProcessException(Errors.format(ErrorKeys.ILLEGAL_ARGUMENT_$2, "band", band)); (Classification) op.getProperty(ClassBreaksDescriptor.CLASSIFICATION_PROPERTY); ParameterBlockJAI pbj = new ParameterBlockJAI("ZonalStats"); pbj.addSource(sourceImage); pbj.setParameter("stats", stats.toArray(new Statistic[stats.size()])); pbj.setParameter("bands", new Integer[] {band}); pbj.setParameter("ranges", ranges); pbj.setParameter("rangesType", Range.Type.INCLUDE); pbj.setParameter("rangeLocalStats", true); op = JAI.create("ZonalStats", pbj); (ZonalStats) op.getProperty(ZonalStatsDescriptor.ZONAL_STATS_PROPERTY); return new Results(stats, zonalStats);
Registry.registerRIF(JAI.getDefaultInstance(), new RangeLookupDescriptor(), new RangeLookupRIF(), Registry.JAI_TOOLS_PRODUCT); RenderedImage sourceImage = coverage.getRenderedImage(); final int numbands=sourceImage.getSampleModel().getNumBands(); if(band<0 || numbands<=band){ throw new ProcessException(Errors.format(ErrorKeys.ILLEGAL_ARGUMENT_$2,"band",band)); ParameterBlockJAI pb = new ParameterBlockJAI("RangeLookup"); pb.setSource("source0", sourceImage); pb.setParameter("table", lookupTable); final RenderedOp indexedClassification = JAI.create("RangeLookup", pb); final GridCoverageFactory factory = CoverageFactoryFinder.getGridCoverageFactory(null); final GridCoverage2D output = factory.create("reclassified", indexedClassification, coverage .getGridGeometry(), new GridSampleDimension[] { outSampleDimension }, new GridCoverage[] { coverage }, new HashMap<String,Double>(){{ put("GC_NODATA",0d);
(GridCoverage2D) parameters .parameter(operation.getSourceNames()[PRIMARY_SOURCE_INDEX]) .getValue(); final AffineTransform gridToWorldTransformCorrected = new AffineTransform( (AffineTransform) ((GridGeometry2D) source.getGridGeometry()) .getGridToCRS2D(PixelOrientation.UPPER_LEFT)); final MathTransform worldToGridTransform; final CoordinateReferenceSystem crs = source.getCoordinateReferenceSystem2D(); final Envelope2D envelope = source.getEnvelope2D(); final double xPeriod = parameters.parameter("xPeriod").doubleValue(); final double yPeriod = parameters.parameter("yPeriod").doubleValue(); if (!Double.isNaN(xPeriod) && !Double.isNaN(yPeriod)) { block.setParameter("xPeriod", Integer.valueOf((int) transformedEnv.getWidth())); block.setParameter("yPeriod", Integer.valueOf((int) transformedEnv.getHeight())); convertPolygon(roiInput, worldToGridTransform); block.setParameter("roi", new ROIShape(shapePolygon));
} else { final ZipOutputStream outZ = (ZipOutputStream) dest; final ZipEntry e = new ZipEntry(gc.getName().toString() + ".GIF"); outZ.putNextEntry(e); final GridCoverage2D gc2 = gc1.geophysics(false); final RenderedImage image = gc2.getRenderedImage(); final ParameterBlockJAI pbj = new ParameterBlockJAI("ImageWrite"); pbj.addSource(image); pbj.setParameter("Output", out); pbj.setParameter("Format", "gif"); JAI.create("ImageWrite", pbj, new RenderingHints(JAI.KEY_TILE_CACHE, null));
int dataType = sources[0].getRenderedImage().getSampleModel().getDataType(); GridCoverage2D cov = sources[i]; block.setSource(cov.getRenderedImage(), i); int dataTypeCov = cov.getRenderedImage().getSampleModel().getDataType(); if (dataType != dataTypeCov) { throw new IllegalArgumentException("Input Coverages must have the same data type"); block.setParameter("noData", nodata); block.setParameter("transformations", tr); if (parameters.parameter(GEOMETRY).getValue() != null) { (Geometry) parameters.parameter(GEOMETRY).getValue(), crsToGRID)); block.setParameter("roi", roi); block.setParameter( "destinationNoData", nodata[getIndex(parameters)].getMin().doubleValue());
} else { if (source.getColorModel() instanceof IndexColorModel) { source = new ImageWorker(source).forceComponentColorModel().getRenderedImage(); block.setSource(source, i); } else { for (int i = 0; i < numSources; i++) { block.setSource(rasters[i], i); block.set(nodata, BACKGROUND_PARAM); block.set(rois, ROI_PARAM); block.set(rr.getAlphas(), ALPHA_PARAM); rasters[PRIMARY_SOURCE_INDEX].getSampleModel().getDataType()); block.set(new double[][] {{threshold}}, THRESHOLD_PARAM); block.set(MosaicDescriptor.MOSAIC_TYPE_OVERLAY, MOSAIC_TYPE_PARAM); ranges[i] = RangeFactory.create(value, value); block.set(ranges, NODATA_RANGE_PARAM);
CoordinateReferenceSystem crs = inputGc.getCoordinateReferenceSystem(); SimpleFeatureType featureType = FeatureTypes.getDefaultType("RasterToVector", Polygon.class, crs); GridGeometry2D gg2D = inputGc.getGridGeometry(); AffineTransform mt = (AffineTransform) gg2D.getGridToCRS2D(PixelOrientation.UPPER_LEFT); Object o = JAI.getDefaultInstance().getOperationRegistry() .getDescriptor(OperationDescriptor.class, "Vectorize"); System.out.println(o); final ParameterBlockJAI pb = new ParameterBlockJAI("Vectorize"); pb.setSource("source0", inputGc.getRenderedImage()); pb.setParameter("band", Integer.valueOf(bandIndex)); pb.setParameter("outsideValues", outsideValues); pb.setParameter("insideEdges", Boolean.valueOf(insideEdges)); final RenderedOp dest = JAI.create("Vectorize", pb); @SuppressWarnings("unchecked") final Collection<Polygon> property = (Collection<Polygon>) dest
ReferencedEnvelope gridExtent = new ReferencedEnvelope(inputCoverage.getEnvelope()); if (gridExtent.contains((com.vividsolutions.jts.geom.Envelope) extent)) { RasterCropOperation cropOp = new RasterCropOperation(); NoData = RasterHelper.getNoDataValue(inputCoverage); GridGeometry2D gridGeometry2D = inputCoverage.getGridGeometry(); AffineTransform gridToWorld = (AffineTransform) gridGeometry2D.getGridToCRS2D(); Extent = RasterHelper.getResolvedEnvelope(extent, CellSizeX, CellSizeY); int bandCount = inputCoverage.getNumSampleDimensions(); ParameterBlockJAI parameterBlock = new ParameterBlockJAI("border", "rendered"); parameterBlock.addSource(inputImage); parameterBlock.setParameter("leftPad", leftPad); parameterBlock.setParameter("rightPad", rightPad); parameterBlock.setParameter("bottomPad", bottomPad); parameterBlock.setParameter("topPad", topPad); final double[] fillValue = new double[bandCount]; for (int index = 0; index < fillValue.length; index++) { fillValue[index] = bandCount == 1 ? NoData : -1; parameterBlock.setParameter("type", new BorderExtenderConstant(fillValue)); PlanarImage outputImage = JAI.create("border", parameterBlock);
/** * An operation which does no processing. * * <p> * Creates a <code>ParameterBlockJAI</code> from all supplied arguments except <code>hints</code> and invokes * {@link JAI#create(String,ParameterBlock,RenderingHints)}. * * @see JAI * @see ParameterBlockJAI * @see RenderedOp * * @param source0 <code>RenderedImage</code> source 0. * @param hints The <code>RenderingHints</code> to use. May be <code>null</code>. * @return The <code>RenderedOp</code> destination. * @throws IllegalArgumentException if <code>source0</code> is <code>null</code>. */ public static RenderedOp create(RenderedImage source0, RenderingHints hints) { // Selection of the parameterBlock associated with the Null operation ParameterBlockJAI pb = new ParameterBlockJAI("Null", RenderedRegistryMode.MODE_NAME); // Setting of the source pb.setSource("source0", source0); // Creation of the RenderedOp associated with the Null operation return JAI.create("Null", pb, hints); }