/** * Creates a new uninitialized worker with RenderingHints for a {@linkplain #mosaic mosaic * operation} * * @see #mosaic(RenderedImage[], MosaicType, PlanarImage[], ROI[], double[][], Range[]) */ public ImageWorker(RenderingHints hints) { this(); setRenderingHints(hints); }
@Override RenderedImage process( ImageWorker inputWorker, Hints hints, Map<String, Expression> parameters) { // // IT WORKS ONLY ON BYTE DATA TYPE!!! // // convert the input image to 8 bit inputWorker.rescaleToBytes(); // compute the histogram final Histogram h = inputWorker.removeRenderingHints().getHistogram(null, null, null); // do the actual lookup Map<String, Object> params = new HashMap<String, Object>(); params.put(KEY_HISTOGRAM, h); LookupTable table = createByteLookupTable(params); inputWorker.setRenderingHints(hints); inputWorker.lookup(table); return inputWorker.getRenderedImage(); }
@Override RenderedImage process( ImageWorker inputWorker, Hints hints, Map<String, Expression> parameters) { checkParameters(parameters, KEY_MIN, KEY_MAX); Map<String, Object> processParams = getMinMaxParams(parameters); RenderedImage inputImage = inputWorker.getRenderedImage(); final int dataType = inputImage.getSampleModel().getDataType(); Utilities.ensureNonNull("processParams", processParams); double minData = (double) processParams.get(KEY_MIN); double maxData = (double) processParams.get(KEY_MAX); if (dataType == DataBuffer.TYPE_BYTE) { // Optimization for byte images, we use the lookup operation if (maxData == MAX_BYTE && minData == MIN_BYTE) return inputImage; LookupTable table = createByteLookupTable(processParams); inputWorker.setRenderingHints(hints); inputWorker.lookup(table); return inputWorker.getRenderedImage(); } // // STEP 2 use generic piecewise // processParams.put(KEY_DATATYPE, dataType); final PiecewiseTransform1D<DefaultPiecewiseTransform1DElement> transform = generatePiecewise(processParams); inputWorker.piecewise(transform, Integer.valueOf(0)); return inputWorker.getRenderedImage(); }
@Override RenderedImage process( ImageWorker inputWorker, Hints hints, Map<String, Expression> parameters) { checkParameters(parameters, KEY_MIN, KEY_MAX); Map<String, Object> processParams = getMinMaxParams(parameters); RenderedImage inputImage = inputWorker.getRenderedImage(); final int dataType = inputImage.getSampleModel().getDataType(); Utilities.ensureNonNull("processParams", processParams); double minData = (double) processParams.get(KEY_MIN); double maxData = (double) processParams.get(KEY_MAX); if (dataType == DataBuffer.TYPE_BYTE) { if (maxData == MAX_BYTE && minData == MIN_BYTE) { return inputImage; } // Optimization for byte images, we use the lookup operation LookupTable table = createByteLookupTable(processParams); inputWorker.setRenderingHints(hints); inputWorker.lookup(table); return inputWorker.getRenderedImage(); } // // STEP 2 use generic piecewise // final PiecewiseTransform1D<DefaultPiecewiseTransform1DElement> transform = generatePiecewise(processParams); inputWorker.piecewise(transform, Integer.valueOf(0)); return inputWorker.getRenderedImage(); }
/** 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(); }
/** * Performs a contrast enhancement operation on the input image. Note that not all the contrast * enhancement operations have been implemented in a way that is generic enough o handle all * data types. * * @param inputImage the input {@link RenderedImage} to work on. * @param hints {@link Hints} to control the contrast enhancement process. * @return a {@link RenderedImage} on which a contrast enhancement has been performed. */ private RenderedImage performContrastEnhancement(ImageWorker inputWorker, final Hints hints) { inputWorker.setRenderingHints(hints); if (contrastEnhancementMethod != null) { RenderedImage inputImage = inputWorker.getRenderedImage(); assert inputImage.getSampleModel().getNumBands() == 1 : inputImage; ContrastEnhancementType ceType = ContrastEnhancementType.getType(contrastEnhancementMethod); return ceType.process(inputWorker, hints, contrastEnhancementMethod.getParameters()); } return inputWorker.getRenderedImage(); }
inputWorker.setRenderingHints(hints); inputWorker.lookup(table); return inputWorker.getRenderedImage(); inputWorker.setRenderingHints(localHints); inputWorker.rescale(new double[] {scale}, new double[] {offset}); return inputWorker.getRenderedImage();
worker.setRenderingHints(hints);
newRi.add(new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout)); try { setRenderingHints(newRi); lookup(lut); } finally { this.setRenderingHints(oldRi);
/** * We override this one to get some extra behavior that ImageWorker has (ROI, paletted images * management) */ protected RenderedImage createRenderedImage( final ParameterBlockJAI parameters, final RenderingHints hints) { parameters.getSources(); RenderedImage[] images = (RenderedImage[]) parameters .getSources() .toArray(new RenderedImage[parameters.getSources().size()]); MosaicType type = getParameter(parameters, 0); PlanarImage[] alphas = getParameter(parameters, ALPHA_PARAM); ROI[] rois = getParameter(parameters, ROI_PARAM); double[][] thresholds = getParameter(parameters, THRESHOLD_PARAM); Range[] noData = getParameter(parameters, NODATA_RANGE_PARAM); double[] backgrounds = getParameter(parameters, BACKGROUND_PARAM); ImageWorker iw = new ImageWorker(); iw.setRenderingHints(hints); iw.setBackground(backgrounds); iw.mosaic(images, type, alphas, rois, thresholds, noData); return iw.getRenderedImage(); }
public static RandomIter getRandomIterator( final PlanarImage src, int leftPad, int rightPad, int topPad, int bottomPad, BorderExtender extender) { RandomIter iterSource; if (extender != null) { ImageWorker w = new ImageWorker(src).setRenderingHints(GeoTools.getDefaultHints()); RenderedOp op = w.border(leftPad, rightPad, topPad, bottomPad, extender).getRenderedOperation(); RandomIter it = RandomIterFactory.create(op, op.getBounds(), true, true); return new ExtendedRandomIter(it, op); } else { iterSource = RandomIterFactory.create(src, src.getBounds(), true, true); } return iterSource; }
double offset = 0; ImageWorker worker = new ImageWorker(inputRI); worker.setRenderingHints(localHints); if (dataType != DataBuffer.TYPE_BYTE) { if (LOGGER.isLoggable(Level.FINE)) {
inputWorker.setRenderingHints(hints); inputWorker.lookup(table); return inputWorker.getRenderedImage(); inputWorker.setRenderingHints(localHints); inputWorker.rescale(new double[] {scale}, new double[] {offset}); return inputWorker.getRenderedImage();
ImageWorker w = new ImageWorker(image) .setRenderingHints(new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout)); w.addBand(alpha, false); image = w.getRenderedImage();
iw.setROI((ROI) roi); iw.setRenderingHints(localHints); iw.affine(finalRaster2Model, interpolation, request.getBackgroundValues()); RenderedImage renderedImage = iw.getRenderedImage();
imageWorker.setRenderingHints(hints); imageWorker2.setRenderingHints(hints);
.setRenderingHints(hints) .format(image.getSampleModel().getDataType()) .getRenderedOperation();
ImageWorker worker = new ImageWorker(inputRI).setRenderingHints(localHints); if (numBands == 3) { worker.bandCombine(ImageUtilities.RGB_TO_GRAY_MATRIX);
ImageWorker worker = new ImageWorker(raster).setRenderingHints(localHints); return worker.affine( virtualTransform, request.getInterpolation(), request.getBackgroundValues())
worker.setRenderingHints(hints); worker.setROI(roi); worker.setNoData(nodata);