for (int i = 0; i < 4; i++) { if (USE_JAI_SCALE2) { pb.set(scalingParams[i], i); } else { pb.set((float) scalingParams[i], i); RenderedImage sourceImage = pb.getRenderedSource(0); ColorModel cm = sourceImage.getColorModel(); SampleModel sm = sourceImage.getSampleModel(); final int numBands = sm.getNumBands(); RenderedImage alphaChannel = null; pb.setSource(noAlpha.getRenderedImage(), 0); pb.set(interpolation, 4); pb.set(roi, 5); pb.set(nodata, 7); pb.set(background, 8); ParameterBlock pb2 = new ParameterBlock(); pb2.setSource(alphaChannel, 0); for (int i = 0; i < 4; i++) { if (USE_JAI_SCALE2) { pb2.set(scalingParams[i], i); } else { pb2.set((float) scalingParams[i], i); pb2.set(Interpolation.getInstance(Interpolation.INTERP_NEAREST), 4);
/** * Returns {@code true} if the parameters are valids. This implementation check that the number * of bands in the source src1 is equals to the number of bands of source src2. * * @param modeName The mode name (usually "Rendered"). * @param param The parameter block for the operation to performs. * @param message A buffer for formatting an error message if any. */ protected boolean validateParameters( final String modeName, final ParameterBlock param, final StringBuffer message) { if (!super.validateParameters(modeName, param, message)) { return false; } final int numColors = ((Integer) param.getObjectParameter(0)).intValue(); final int alphaThreashold = ((Integer) param.getObjectParameter(1)).intValue(); final int ssx = ((Integer) param.getObjectParameter(2)).intValue(); final int ssy = ((Integer) param.getObjectParameter(3)).intValue(); final RenderedImage source = (RenderedImage) param.getSource(0); if (ssx <= 1 && ssx >= source.getWidth()) return false; if (ssy <= 1 && ssy >= source.getHeight()) return false; if (alphaThreashold < 0 || alphaThreashold > 255) return false; if (numColors <= 0 || (numColors > 256)) return false; return true; } }
public ImageWorker translate(float xTrans, float yTrans, Interpolation interp) { ParameterBlock pb = new ParameterBlock(); pb.addSource(image); pb.add(xTrans); pb.add(yTrans); pb.add(interp); // do not use getRenderingHints() with translate, as it cannot deal with layout hints image = JAI.create("Translate", pb, commonHints); return this; }
/** * Reads an image from a GeoTIFF file. For more information, see <a * href="http://download.java.net/media/jai-imageio/javadoc/1.1/com/sun/media/jai/operator/ImageReadDescriptor.html#RenderedMode">ImageReadDescriptor</a> */ private static synchronized RenderedImage readImage(File inFile) throws IOException { final ParameterBlock readParams = new ParameterBlock(); ImageInputStreamSpi lSpi = ImageIOExt.getImageInputStreamSPI(inFile); PlanarImage lImage = null; ImageInputStream lImgIn = lSpi.createInputStreamInstance(inFile, false, null); readParams.add(lImgIn); readParams.add(0); readParams.add(Boolean.FALSE); readParams.add(Boolean.FALSE); readParams.add(Boolean.FALSE); readParams.add(null); readParams.add(null); readParams.add(null); readParams.add(READER_SPI.createReaderInstance()); lImage = JAI.create("ImageRead", readParams, null); final String lFileName = inFile.getName(); final int lExtIndex = lFileName.lastIndexOf('.'); final String lFileNameNoExt = lExtIndex < 0 ? lFileName : lFileName.substring(0, lExtIndex); lImage.setProperty("name", lFileNameNoExt); return lImage; }
private double[] getScalingParams(ParameterBlock paramBlock, boolean isScale2) { // Shearing is not taken into account. // params are ordered like this: scaleX, scaleY, transX, transY double[] scalingParams = new double[4]; for (int i = 0; i < 4; i++) { // Use proper datatype parameter getter depending on the type of operation scalingParams[i] = isScale2 ? paramBlock.getDoubleParameter(i) : paramBlock.getFloatParameter(i); } return scalingParams; }
ParameterBlock pb = new ParameterBlock(); pb.setSource(image, 0); pb.set(table, 0); pb.set(roi, 2); pb.set(nodata, 3); if (isNoDataNeeded()) { if (background != null && background.length > 0) { pb.set(background[0], 1); ParameterBlock pb = new ParameterBlock(); pb.setSource(expanded, 0); pb.setSource(alphaBand, 1); pb.set( new Range[] { nodata, if (background != null && background.length > 0) { double dest = background[0]; pb.set(dest, 1); pb.set(roi, 3); pb.set(true, 4); result = JAI.create("BandMerge", pb, null); ParameterBlock pb = new ParameterBlock(); pb.setSource(expanded, 0); opacity, bands, alphaBand, expanded.getSampleModel().getDataType()); pb.set(table, 0);
RenderedOp op = (RenderedOp) opNode; ParameterBlock pb = op.getParameterBlock(); RenderedImage src = pb.getRenderedSource(0); Object property = src.getProperty("ROI"); if (property == null || property.equals(java.awt.Image.UndefinedProperty) Interpolation interp = (Interpolation) pb.getObjectParameter(1); Warp warp = (Warp) pb.getObjectParameter(0); Rectangle dstBounds = op.getBounds(); hints.add(new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout)); warpingHints.remove(JAI.KEY_IMAGE_LAYOUT); final ParameterBlock paramBlk = new ParameterBlock(); paramBlk.addSource(constantImage); paramBlk.add(warp); paramBlk.add(interp); paramBlk.add(null); paramBlk.add(srcROI); paramBlk.add(null);
final ColorModel cm = image.getColorModel(); if (cm instanceof ComponentColorModel) { Color bgColor = getBackgroundColor(); if (bgColor == null) { bgColor = Color.BLACK; ParameterBlock pb = new ParameterBlock(); pb.setSource(image, 0); pb.set(lut, 0); pb.set(roi, 2); pb.set(nodata, 3); pb.set(background[0], 1); image = JAI.create("Lookup", pb, hints); (cm instanceof DirectColorModel) ? DataBuffer.TYPE_BYTE : image.getSampleModel().getTransferType(); final RenderingHints hints = getRenderingHints(type); ParameterBlock pb = new ParameterBlock(); pb.setSource(image, 0); // The source image. pb.set(type, 0); image = JAI.create("Format", pb, hints);
RenderedOp op = (RenderedOp) opNode; ParameterBlock pb = op.getParameterBlock(); RenderedImage src = pb.getRenderedSource(0); Object property = src.getProperty("ROI"); if (property == null || property.equals(java.awt.Image.UndefinedProperty) || !(property instanceof ROI)) { if (pb.getNumParameters() >= 4 && pb.getObjectParameter(3) != null) { property = pb.getObjectParameter(3); } else { return java.awt.Image.UndefinedProperty; Interpolation interp = (Interpolation) pb.getObjectParameter(1); AffineTransform transform = (AffineTransform) pb.getObjectParameter(0); ParameterBlock paramBlock = new ParameterBlock(); paramBlock.add(transform); paramBlock.add(Interpolation.getInstance(Interpolation.INTERP_NEAREST)); Hints localHints = new Hints(op.getRenderingHints()); localHints.remove(JAI.KEY_IMAGE_LAYOUT); ImageLayout il = new ImageLayout(); Rectangle dstBounds = op.getBounds(); il.setMinX(dstBounds.x); il.setMinY(dstBounds.y);
ParameterBlock pb = new ParameterBlock(); pb.setSource(source, 0); pb.set(tx, 0); pb.set(interpolation, 1); pb.set(bgValues, 2); pb.set(roi, 3); pb.set(true, 5); pb.set(nodata, 6); RenderedOp at = JAI.create("Affine", pb, getRenderingHints()); Warp sourceWarp = (Warp) sourceParamBlock.getObjectParameter(0); if (warp instanceof WarpGrid || warp instanceof WarpAffine final ParameterBlock paramBlk = new ParameterBlock().addSource(sourceImage); Object property = sourceImage.getProperty("ROI"); (sourceParamBlock.getNumParameters() > 3 ? sourceParamBlock.getObjectParameter(4) : null); boolean hasSameNodata = || property.equals(java.awt.Image.UndefinedProperty) || !(property instanceof ROI))) { paramBlk.add(warp).add(interpolation).add(bgValues); if (oldNoData != null) { paramBlk.set(oldNoData, 4); paramBlk.set(newROI, 3);
assert image.getColorModel() instanceof IndexColorModel; IndexColorModel cm = (IndexColorModel) image.getColorModel(); final int numComponents = cm.getNumComponents(); int transparency = cm.getTransparency(); final ImageLayout layout = new ImageLayout(image); layout.setColorModel(cm); final RenderingHints hints = getRenderingHints(); hints.add(new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout)); hints.add(new RenderingHints(JAI.KEY_REPLACE_INDEX_COLOR_MODEL, Boolean.FALSE)); ParameterBlock pb = new ParameterBlock(); pb.setSource(image, 0); // The source image. pb.set(image.getSampleModel().getDataType(), 0); image = JAI.create("Format", pb, hints); setNoData(RangeFactory.convert(nodata, image.getSampleModel().getDataType())); invalidateStatistics(); return this;
/** Forces the provided {@link ColorModel} via the JAI ColorConvert operation. */ private void forceColorModel(final ColorModel cm) { final ImageLayout2 il = new ImageLayout2(image); il.setColorModel(cm); il.setSampleModel(cm.createCompatibleSampleModel(image.getWidth(), image.getHeight())); final RenderingHints oldRi = this.getRenderingHints(); final RenderingHints newRi = (RenderingHints) oldRi.clone(); newRi.add(new RenderingHints(JAI.KEY_IMAGE_LAYOUT, il)); setRenderingHints(newRi); // Setting the parameter blocks ParameterBlock pb = new ParameterBlock(); pb.setSource(image, 0); pb.set(cm, 0); pb.set(roi, 1); pb.set(nodata, 2); if (isNoDataNeeded()) { if (background != null && background.length > 0) { // Elaborating the final NoData value if (background.length != cm.getNumColorComponents()) { throw new IllegalArgumentException("Wrong DestinationNoData value defined"); } pb.set(background, 3); } } image = JAI.create("ColorConvert", pb, getRenderingHints()); // restore RI this.setRenderingHints(oldRi); // invalidate stats invalidateStatistics(); }
if (image instanceof RenderedOp) { RenderedOp op = (RenderedOp) image; if ("Crop".equals(op.getOperationName()) || "GTCrop".equals(op.getOperationName())) { ParameterBlock paramBlock = op.getParameterBlock(); source = paramBlock.getRenderedSource(0); float sx = paramBlock.getFloatParameter(0); float sy = paramBlock.getFloatParameter(1); float sWidth = paramBlock.getFloatParameter(2); float sHeight = paramBlock.getFloatParameter(3); ParameterBlock pb = new ParameterBlock(); pb.setSource(source, 0); pb.set(x, 0); pb.set(y, 1); pb.set(width, 2); pb.set(height, 3); pb.set(roi, 4); pb.set(nodata, 5); if (isNoDataNeeded()) { double destinationNoData = nodata != null : Double.NaN; if (!Double.isNaN(destinationNoData)) { pb.set(new double[] {destinationNoData}, 6);
ParameterBlock pb = new ParameterBlock(); pb.setSource(image, 0); pb.set(opaqueBands, 0); image = JAI.create("BandSelect", pb, hints); numBands = numColorBands; ParameterBlock pb = new ParameterBlock(); pb.setSource(image, 0); pb.set(table, 0); pb.set(roi, 2); pb.set(nodata, 3); if (isNoDataNeeded()) { if (background != null && background.length > 0) { pb.set(background[0], 1); pb = new ParameterBlock(); pb.setSource(luImage, 0); pb.set(matrix, 0); pb.set(roi, 1); pb.set(nodata, 2); if (background != null && background.length > 0) { pb.set(background[0], 3); pb = new ParameterBlock(); pb.setSource(image, 0); pb.setSource(luImage, 1); pb.set(new Range[] {nodata}, 0); double dest = background[0];
/** * Shave off the alpha band, JPEG cannot write it out * * @param ri * @return */ @Override public RenderedImage preprocess(RenderedImage ri) { if (ri.getColorModel().hasAlpha()) { final int numBands = ri.getSampleModel().getNumBands(); // handle both gray-alpha and RGBA (same code as in GeoTools ImageWorker) final int[] bands = new int[numBands - 1]; for (int i = 0; i < bands.length; i++) { bands[i] = i; } // ParameterBlock creation ParameterBlock pb = new ParameterBlock(); pb.setSource(ri, 0); pb.set(bands, 0); final RenderingHints hints = new RenderingHints(JAI.KEY_IMAGE_LAYOUT, new ImageLayout(ri)); ri = JAI.create("BandSelect", pb, hints); } return ri; } };
final ParameterBlock pbjImageRead = new ParameterBlock(); pbjImageRead.add(rasterFile); pbjImageRead.add(imageIndex); pbjImageRead.add(false); pbjImageRead.add(false); pbjImageRead.add(false); pbjImageRead.add(null); pbjImageRead.add(null); pbjImageRead.add(readP); pbjImageRead.add(spi.createReaderInstance()); final RenderedOp raster; if (tileDimension != null) { final ImageLayout layout = new ImageLayout(); layout.setTileWidth(tileDimension.width).setTileHeight(tileDimension.height); raster = JAI.create( "ImageReadMT", pbjImageRead, new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout)); } else raster = JAI.create("ImageReadMT", pbjImageRead); if (raster != null) raster.getWidth(); return raster;
@Override public RenderedImage create(ParameterBlock pb, RenderingHints hints) { // Get ImageLayout from renderHints if present. ImageLayout layout = RIFUtil.getImageLayoutHint(hints); // Selection of the source RenderedImage source = pb.getRenderedSource(0); // Selection of the parameters double[] scales = (double[]) pb.getObjectParameter(0); double[] offsets = (double[]) pb.getObjectParameter(1); ROI roi = (ROI) pb.getObjectParameter(2); Range noData = (Range) pb.getObjectParameter(3); noData = RangeFactory.convert(noData, source.getSampleModel().getDataType()); boolean useRoiAccessor = (Boolean) pb.getObjectParameter(4); double destinationNoData = pb.getDoubleParameter(5); // Creation of the new image return new RescaleOpImage(source, layout, hints, scales, offsets, destinationNoData, roi, noData, useRoiAccessor); }
final ColorModel cm = image.getColorModel(); if (cm instanceof IndexColorModel) { final IndexColorModel oldCM = (IndexColorModel) cm; hints.put(JAI.KEY_TRANSFORM_ON_COLORMAP, Boolean.FALSE); hints.put(JAI.KEY_IMAGE_LAYOUT, layout); ParameterBlock pb = new ParameterBlock(); pb.setSource(image, 0); pb.set(lookupTable, 0); pb.set(roi, 2); pb.set(nodata, 3); if (isNoDataNeeded()) { if (background != null && background.length > 0) { pb.set(background[0], 1); image = JAI.create("Lookup", pb, hints); pb = new ParameterBlock(); pb.setSource(image, 0); int dataType = image.getSampleModel().getDataType(); pb.set(dataType, 0); image = JAI.create("Format", pb, hints); ParameterBlock pb = new ParameterBlock(); pb.setSource(image, 0); pb.set(new int[] {--numBands}, 0); final RenderedOp alphaChannel = JAI.create("BandSelect", pb, hints);
ParameterBlock pb = new ParameterBlock(); pb.setSource(mask, 0); pb.set(lut, 0); if (background != null && background.length > 0) { pb.set(background[0], 1); pb.set(roi, 2); pb = new ParameterBlock(); pb.setSource(image, 0); pb.setSource(mask, 1); if (JAIExt.isJAIExtOperation(ALGEBRIC_OP_NAME)) { prepareAlgebricOperation(Operator.SUM, pb, roi, nodata, true); image = JAI.create(ALGEBRIC_OP_NAME, pb, getRenderingHints()); } else { image = JAI.create("Add", pb, getRenderingHints()); new RenderingHints(JAI.KEY_REPLACE_INDEX_COLOR_MODEL, Boolean.FALSE); if (maskValue) { pb = new ParameterBlock(); pb.setSource(mask, 0); pb = new ParameterBlock(); pb.setSource(mask, 0); pb.setSource(image, 1); pb = new ParameterBlock(); pb.setSource(mask, 0);