final ImageWorker imageWorker = new ImageWorker(mosaic); hints = prepareHints(hints); imageWorker.setRenderingHints(hints); if (!imageWorker.isColorSpaceGRAYScale()) { if (!imageWorker.isColorSpaceRGB()) { imageWorker.forceColorSpaceRGB(); imageWorker.forceComponentColorModel(); // todo optimize with paletted imagery if (imageWorker.getRenderedImage().getColorModel().hasAlpha()) { new ImageWorker(imageWorker.getRenderedImage()) .retainLastBand() .getRenderedImage(); RenderedImage maskedAlpha = new ImageWorker(hints) .mosaic( new RenderedImage[] {alpha}, MosaicDescriptor.MOSAIC_TYPE_OVERLAY, null, null) .getRenderedImage(); imageWorker.retainBands(mosaic.getColorModel().getNumColorComponents()); imageWorker.addBand(maskedAlpha, false, true, null); } else {
/** * The BandMerge operation takes indexed images and expands them, however in the context of * coverage view band merging we don't normally want that, e.g., raster mask bands are * represented as indexed but we really want to keep them in their binary, single band form. To * do so, the IndexColorModel is replaced by a ComponentColorModel * * @param coverage * @return */ private GridCoverage2D prepareForBandMerge(GridCoverage2D coverage) { RenderedImage ri = coverage.getRenderedImage(); SampleModel sampleModel = ri.getSampleModel(); if (sampleModel.getNumBands() == 1 && ri.getColorModel() instanceof IndexColorModel) { ImageWorker worker = new ImageWorker(ri); worker.removeIndexColorModel(); RenderedImage formatted = worker.getRenderedImage(); return new GridCoverageFactory() .create( coverage.getName(), formatted, coverage.getGridGeometry(), coverage.getSampleDimensions(), new GridCoverage[] {coverage}, coverage.getProperties()); } return coverage; }
tileHeight = imageIoWriteParams.getTileHeight(); } else { tileWidth = ri.getTileWidth(); tileHeight = ri.getTileHeight(); new ImageWorker(ri).writeTIFF(stream, compression, quality, tileWidth, tileHeight); } else { final GeneralParameterValue[] wps =
} else { final ImageWorker worker = new ImageWorker(returnValues.get(0).getRenderedImage()); for (int i = 1; i < size; i++) { worker.addBand(returnValues.get(i).getRenderedImage(), false); .create( "result", worker.getRenderedImage(), returnValues.get(0).getEnvelope(), sds,
ColorModel colorModel = image.getColorModel(); index.getPixelSize(), index.getMapSize(), reds, greens, blues, alphas); LookupTable table = buildOpacityLookupTable(0, 1, -1, image.getSampleModel().getDataType()); ImageLayout layout = new ImageLayout(image); layout.setColorModel(newColorModel); RenderingHints hints = new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout); if (isNoDataNeeded()) { result = JAI.create("Lookup", pb, hints); expanded = new ImageWorker(image).forceComponentColorModel().getRenderedImage(); } else { expanded = image; }, 0); if (isNoDataNeeded()) { if (background != null && background.length > 0) { double dest = background[0]; buildOpacityLookupTable( opacity, bands, alphaBand, expanded.getSampleModel().getDataType()); if (isNoDataNeeded()) {
if (raster.getColorModel() instanceof IndexColorModel && expandToRGB) { raster = new ImageWorker(raster).forceComponentColorModel().getRenderedImage(); raster = new ImageWorker(raster).retainBands(bands).getRenderedImage(); ColorModel colorModel = raster.getColorModel(); if (colorModel == null) { ImageLayout layout = (ImageLayout) hints.get(JAI.KEY_IMAGE_LAYOUT); if (layout == null) { layout = new ImageLayout(); ImageIOUtilities.createColorModel(raster.getSampleModel()); if (newColorModel != null) { layout.setColorModel(newColorModel); raster = new ImageWorker(raster) .setRenderingHints(hints) .format(raster.getSampleModel().getDataType()) .getRenderedImage(); ImageWorker iw = new ImageWorker(raster); iw.setRenderingHints(localHints); if (iw.getNoData() == null && this.noData != null) { iw.setNoData(this.noData.getAsRange()); iw.affine(finalRaster2Model, interpolation, request.getBackgroundValues()); RenderedImage renderedImage = iw.getRenderedImage(); if (iw.getNoData() != null) { PlanarImage t = PlanarImage.wrapRenderedImage(renderedImage);
new ImageWorker(sourceImage) .setRenderingHints(hints) .forceComponentColorModel() .rescaleToBytes() .getRenderedImage(); new ImageWorker(sourceImage) .setRenderingHints(hints) .forceComponentColorModel() .getRenderedImage(); alphaBand = new ImageWorker(initialImage) .setRenderingHints(hints).retainLastBand() .getRenderedImage(); initialImage = new ImageWorker(initialImage) .setRenderingHints(hints).retainBands(numbands - 1) .getRenderedImage(); IHS = new ImageWorker(initialImage) .setRenderingHints(hints).forceColorSpaceIHS() .getRenderedImage(); intensityImage = new ImageWorker(IHS).setRenderingHints( hints).retainFirstBand().getRenderedImage(); sChannel = new ImageWorker(IHS).setRenderingHints(hints) .retainLastBand().getRenderedImage(); hChannel = new ImageWorker(IHS).setRenderingHints(hints) .retainBands(new int[] { 1 }).getRenderedImage();
ColorModel colorModel = image.getColorModel(); LookupTableJAI table = buildOpacityLookupTable(0, 1, -1); ImageLayout layout = new ImageLayout(image); layout.setColorModel(newColorModel); RenderingHints hints = new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout); result = LookupDescriptor.create(image, table, hints); } else { expanded = new ImageWorker(image).forceComponentColorModel().getRenderedImage(); } else { expanded = image; if(!expanded.getColorModel().hasAlpha()) { ImageLayout layout = new ImageLayout(image.getMinX(), image.getMinY(), image.getWidth(), image.getHeight()); RenderedOp alphaBand = ConstantDescriptor.create( (float) image.getWidth(), (float) image.getHeight(), new Byte[] {new Byte(alpha)}, new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout)); final int bands = expanded.getSampleModel().getNumBands(); int alphaBand = bands - 1; LookupTableJAI table = buildOpacityLookupTable(opacity, bands, alphaBand); result = LookupDescriptor.create(expanded, table, null);
transparent = true; ColorModel cm = coverage.getRenderedImage().getColorModel(); if (cm.getTransparency() == Transparency.OPAQUE && transparent) { forceTransparent = true; RenderedImage image = coverage.getRenderedImage(); if (forceTransparent) { ImageWorker iw = new ImageWorker(image); iw.forceComponentColorModel(); final ImageLayout tempLayout = new ImageLayout(image); tempLayout.unsetValid(ImageLayout.COLOR_MODEL_MASK).unsetValid( ImageLayout.SAMPLE_MODEL_MASK); RenderedImage alpha = ConstantDescriptor.create( Float.valueOf(image.getWidth()), Float.valueOf(image.getHeight()), new Byte[] { Byte.valueOf((byte) 255) }, new RenderingHints( JAI.KEY_IMAGE_LAYOUT, tempLayout)); iw.addBand(alpha, false); image = iw.getRenderedImage(); cm = image.getColorModel(); if (cm instanceof IndexColorModel) { expand = true; } else if (cm instanceof ComponentColorModel && cm.getNumComponents() == 1 && cm.getComponentSize()[0] == 1) { expand = true;
if (type != null && type.equalsIgnoreCase("HISTOGRAM")) { worker = new ImageWorker(sourceImage) .setROI(roi) .setNoData(nodata) .setRenderingHints(hints) .forceComponentColorModel() .rescaleToBytes(); } else { worker = new ImageWorker(sourceImage) .setROI(roi) .setNoData(nodata) .setRenderingHints(hints) .forceComponentColorModel(); final int numbands = worker.getNumBands(); new ImageWorker(worker.getRenderedImage()) .setRenderingHints(hints) .retainLastBand() .getRenderedImage(); worker.setRenderingHints(hints).retainBands(numbands - 1); IHS = worker.setRenderingHints(hints).forceColorSpaceIHS().getRenderedImage(); intensityWorker = worker.setRenderingHints(hints).retainFirstBand(); sChannel =
renderingHints); if (rasterBounds.x != 0 || rasterBounds.y != 0) { ImageWorker w = new ImageWorker(finalImage); w.translate( (float) rasterBounds.x, (float) rasterBounds.y, Interpolation.getInstance(Interpolation.INTERP_NEAREST)); finalImage = w.getRenderedImage(); new ImageWorker(finalImage) .setRenderingHints(renderingHints) .format(il.getSampleModel(null).getDataType()) .getRenderedImage(); | ImageLayout.HEIGHT_MASK | ImageLayout.SAMPLE_MODEL_MASK)); ImageWorker w = new ImageWorker(renderingHints); w.setBackground(bkgValues); w.mosaic( new RenderedImage[0], MosaicDescriptor.MOSAIC_TYPE_OVERLAY, w.setNoData(RangeFactory.create(noData, noData)); finalImage = w.getRenderedImage(); new ImageWorker(finalImage) .makeColorTransparent(inputTransparentColor) .getRenderedImage();
final ImageWorker worker = new ImageWorker(image); final int transparencyType = cm.getTransparency(); new RenderingHints(JAI.KEY_IMAGE_LAYOUT, ilColorModel); worker.setRenderingHints(hints); worker.format(image.getSampleModel().getDataType()); image = worker.getRenderedImage(); transparent ? 0 : 255 }; worker.setBackground(bgValues); image = worker.forceComponentColorModel().getRenderedImage(); if (transparent && !image.getColorModel().hasAlpha()) { image = addAlphaChannel(image); worker.setImage(image); if (cm.hasAlpha() && bgColorIndex == -1) { worker.forceComponentColorModel(); final RenderedImage alpha = worker.retainLastBand().getRenderedImage(); alphaChannels = new PlanarImage[] {PlanarImage.wrapRenderedImage(alpha)}; final ImageWorker iw = new ImageWorker(image); if (hasAlpha) { final RenderedImage alpha = iw.retainLastBand().getRenderedImage(); new ImageWorker(image).retainFirstBand().getRenderedImage(); image = new ImageWorker(gray) .bandMerge(3)
if (cm.hasAlpha() && (numBands == 2 || numBands == 4) && (interpolation != null new ImageWorker(sourceImage).setRenderingHints(hints).retainBands(numBands - 1); alphaChannel = new ImageWorker(sourceImage) .setRenderingHints(hints) .retainLastBand() .getRenderedImage(); pb.setSource(noAlpha.getRenderedImage(), 0); if (isNoDataNeeded()) { RenderedImage scaledImage = JAI.create(SCALE_OP_NAME, pb, hints); image = scaledImage; if (alphaChannel != null) { alphaChannel = JAI.create(SCALE_OP_NAME, pb2, hints); cm); RenderingHints hints2 = new RenderingHints(JAI.KEY_IMAGE_LAYOUT, newImageLayout); ImageWorker merging = new ImageWorker(scaledImage) .setRenderingHints(hints2) .addBand(alphaChannel, false, true, null); image = merging.getRenderedImage();
ParameterBlock paramBlk = new ParameterBlock(); switch (actionTaken) { case 1: { sourceImage = new ImageWorker(sourceImage).forceComponentColorModel().getPlanarImage(); break; paramBlk.addSource(sourceImage); targetHints = new RenderingHints(hints); } else if (hints != null) { targetHints.add(hints); processor = (JAI) property; } else { processor = JAI.getDefaultInstance(); paramBlk = paramBlk.add((float) (xmin)) .add((float) (ymin)) .add((float) (xmax - xmin)) final RenderedOp targetImage = processor.createNS(operation, paramBlk, targetHints); final Locale locale = sourceCoverage.getLocale(); // For logging purpose.
final Hints hints = getHints(); final List<GridCoverage2D> sourceGridCoverages = new ArrayList<GridCoverage2D>(); ImageWorker w = new ImageWorker(); do { w.setImage(op); w.setROI(CoverageUtilities.getROIProperty(currentSourceCoverage)); NoDataContainer container = CoverageUtilities.getNoDataProperty(currentSourceCoverage); w.setNoData(container != null ? container.getAsRange() : null); } else { w.setRenderingHints(hints); ROI roi = w.getROI(); ROI roiProperty = CoverageUtilities.getROIProperty(currentSourceCoverage); if (roi != null) { w.setROI(roi); NoDataContainer container = CoverageUtilities.getNoDataProperty(currentSourceCoverage); w.addBand( currentSourceCoverage.getRenderedImage(), false, op = w.getRenderedImage(); intermediateOps.add(op); w.addBand(alpha, false, true, null); op = w.getRenderedImage();
ColorModel cm = image.getColorModel(); final boolean hasAlpha = cm.hasAlpha(); forceComponentColorModel(); cm = image.getColorModel(); rescaleToBytes(); cm = image.getColorModel(); final int numBands = image.getSampleModel().getNumBands(); if (hasAlpha) { retainBands(numBands - 1); ((WritableRaster) image.getData()) .createWritableTranslatedChild(0, 0), image.getColorModel().isAlphaPremultiplied(), null);
ImageWorker worker = new ImageWorker(image); log.log(image, query.getRasterId(), "01_original"); if (expandCM) { image = worker.format(Integer.valueOf(DataBuffer.TYPE_BYTE)).getRenderedImage(); log.log(image, query.getRasterId(), "04_1_colorExpanded"); image = worker.getRenderedImage(); log.log(image, query.getRasterId(), "02_crop"); worker.scale( scaleX, scaleY, image = worker.getRenderedImage(); log.log(image, query.getRasterId(), "03_scale"); worker.translate( null); image = worker.getRenderedImage(); log.log(image, query.getRasterId(), "04_translate"); ImageWorker w = new ImageWorker(); w.setRenderingHints(hints); w.setBackground(backgroundValues); mosaic = w.mosaic(images, MosaicDescriptor.MOSAIC_TYPE_OVERLAY, null, null, null, null)
if (image.getColorModel() instanceof IndexColorModel) { LookupTable lut = null; SampleModel sampleModel = image.getSampleModel(); int dataType = sampleModel.getDataType(); switch (dataType) { case DataBuffer.TYPE_BYTE: final SampleModel destinationSampleModel = destinationColorModel.createCompatibleSampleModel( sampleModel.getWidth(), sampleModel.getHeight()); ImageLayout layout = new ImageLayout(image); layout.setColorModel(destinationColorModel); layout.setSampleModel(destinationSampleModel); final RenderingHints oldRi = this.getRenderingHints(); final RenderingHints newRi = (RenderingHints) oldRi.clone(); newRi.add(new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout)); try { setRenderingHints(newRi); lookup(lut); } finally { this.setRenderingHints(oldRi);
/** 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(); }
final ParameterBlock pbjRead = new ParameterBlock(); pbjRead.add( maskOvrProvider .getExternalOverviewInputStreamSpi() ImageIO.getCacheDirectory())); } else { pbjRead.add( maskOvrProvider .getInputStreamSpi() pbjRead.add(READER_SPI.createReaderInstance()); RenderedOp coverageRaster = JAI.create( "ImageRead", pbjRead, newHints != null ? (RenderingHints) newHints : null); new ImageWorker(coverageRaster) .setRenderingHints(newHints) .makeColorTransparent(inputTransparentColor) .getRenderedOperation();