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); } }
final OperationRegistry opRegistry = JAI.getDefaultInstance().getOperationRegistry(); for (String mode : RegistryMode.getModeNames()) { for (Iterator descriptors = opRegistry.getDescriptors(mode).iterator();
JAI.getDefaultInstance() .setImagingListener( new ImagingListener() { final Logger LOGGER = Logging.getLogger("javax.media.jai"); JAI jaiDef = JAI.getDefaultInstance(); if (!(jaiDef.getOperationRegistry() instanceof ConcurrentOperationRegistry || jaiDef.getOperationRegistry() instanceof it.geosolutions.jaiext.ConcurrentOperationRegistry)) { jaiDef.setOperationRegistry(ConcurrentOperationRegistry.initializeRegistry()); if (!(jaiDef.getTileCache() instanceof ConcurrentTileCacheMultiMap)) { jaiDef.setTileCache(new ConcurrentTileCacheMultiMap());
public static OperationRegistry initializeRegistry() { try { InputStream url = PropertyUtil.getFileFromClasspath(JAI_REGISTRY_FILE); if (url == null) { throw new RuntimeException("Could not find the main registry file"); } OperationRegistry registry = new ConcurrentOperationRegistry(); if (url != null) { registry.updateFromStream(url); } registry.registerServices(null); return registry; } catch (IOException ioe) { ImagingListener listener = JAI.getDefaultInstance().getImagingListener(); String message = "Error occurred while initializing JAI"; listener.errorOccurred( message, new ImagingException(message, ioe), OperationRegistry.class, false); return null; } }
void initJAI(JAIInfo jai) { JAI jaiDef = JAI.getDefaultInstance(); jai.setJAI(jaiDef); if (ImageWorker.isJaiExtEnabled()) { if (jai.getJAIEXTInfo() != null) { JAIEXTInfo jaiext = jai.getJAIEXTInfo(); jaiDef.setRenderingHint(JAI.KEY_CACHED_TILE_RECYCLING_ENABLED, jai.isRecycling()); && !(jaiDef.getRenderingHint(JAI.KEY_TILE_FACTORY) instanceof ConcurrentTileFactory)) { final ConcurrentTileFactory recyclingFactory = new ConcurrentTileFactory(); jaiDef.setRenderingHint(JAI.KEY_TILE_FACTORY, recyclingFactory); jaiDef.setRenderingHint(JAI.KEY_TILE_RECYCLER, recyclingFactory); } else { if (!jai.isRecycling()) { final PassThroughTileFactory passThroughFactory = new PassThroughTileFactory(); jaiDef.setRenderingHint(JAI.KEY_TILE_FACTORY, passThroughFactory); jaiDef.setRenderingHint(JAI.KEY_TILE_RECYCLER, passThroughFactory); TileCache jaiCache = jaiDef.getTileCache(); jai.setTileCache(jaiCache); jaiDef.getTileScheduler().setParallelism(jai.getTileThreads()); jaiDef.getTileScheduler().setPrefetchParallelism(jai.getTileThreads()); jaiDef.getTileScheduler().setPriority(jai.getTilePriority()); jaiDef.getTileScheduler().setPrefetchPriority(jai.getTilePriority());
ColorModel colorModel = image.getColorModel(); ParameterBlock pb = new ParameterBlock(); pb.setSource(image, 0); pb.set(table, 0); if (isNoDataNeeded()) { result = JAI.create("Lookup", pb, hints); expanded = new ImageWorker(image).forceComponentColorModel().getRenderedImage(); } else { expanded = image; if (!expanded.getColorModel().hasAlpha()) { new ImageLayout( new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout)); result = JAI.create("BandMerge", pb, null); final int bands = expanded.getSampleModel().getNumBands(); int alphaBand = bands - 1; opacity, bands, alphaBand, expanded.getSampleModel().getDataType()); result = JAI.create("Lookup", pb, null);
final ColorModel cm = image.getColorModel(); if (cm instanceof ComponentColorModel) { final SampleModel sm = this.image.getSampleModel(); final int datatype = sm.getDataType(); Range noData = getNoData(); final boolean gray = ColorUtilities.isGrayPalette(icm, checkTransparent) Color bgColor = getBackgroundColor(); if (bgColor == null) { bgColor = Color.BLACK; for (int i = 0; i < numDestinationBands; i++) bits[i] = sm.getSampleSize(i); final ComponentColorModel destinationColorModel = new ComponentColorModel( ParameterBlock pb = new ParameterBlock(); pb.setSource(image, 0); pb.set(lut, 0); image = JAI.create("Lookup", pb, hints); (cm instanceof DirectColorModel) ? DataBuffer.TYPE_BYTE : image.getSampleModel().getTransferType(); image = JAI.create("Format", pb, hints);
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); layout.setTileHeight(op.getTileHeight()); RenderingHints hints = op.getRenderingHints(); hints.add(new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout)); warpingHints.remove(JAI.KEY_IMAGE_LAYOUT); ImageLayout il = new ImageLayout(); il.setMinX(dstBounds.x); il.setMinY(dstBounds.y); il.setWidth(dstBounds.width); il.setHeight(dstBounds.height); roiImage = JAI.create("Warp", paramBlk, localHints); } else {
int size = Math.max(image.getWidth(), image.getHeight()); boolean hasScaleX = Math.abs(tx.getScaleX() - 1) * size > RS_EPS; boolean hasScaleY = Math.abs(tx.getScaleY() - 1) * size > RS_EPS; getOperationDescriptor("affine") .getParameterListDescriptor(RenderedRegistryMode.MODE_NAME); if (interpolation == null) { Double tolerance = (Double) getRenderingHint(Hints.RESAMPLE_TOLERANCE); if (tolerance == null) { tolerance = (Double) Hints.getSystemDefault(Hints.RESAMPLE_TOLERANCE); ParameterBlock pb = new ParameterBlock(); pb.setSource(source, 0); pb.set(tx, 0); RenderedOp at = JAI.create("Affine", pb, getRenderingHints()); if (source.getProperty("ROI") instanceof ROI) { localHints.put(JAI.KEY_IMAGE_LAYOUT, il); RenderedOp result = JAI.create("Warp", paramBlk, localHints); result.setProperty("MathTransform", chained); image = result; image = JAI.create("Affine", pb, getRenderingHints());
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; new ImageWorker(sourceImage).setRenderingHints(hints).retainBands(numBands - 1); 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);
return null; ImageLayout layout = initToImage ? new ImageLayout(image) : null; if ((image.getNumXTiles() == 1 || image.getTileWidth() < STRIPE_SIZE) && (image.getNumYTiles() == 1 || image.getTileHeight() < STRIPE_SIZE)) { layout = layout.unsetTileLayout(); Dimension defaultSize = JAI.getDefaultTileSize(); if (defaultSize == null) { defaultSize = GEOTOOLS_DEFAULT_TILE_SIZE; if ((s = toTileSize(image.getWidth(), defaultSize.width)) != 0) { if (layout == null) { layout = new ImageLayout(); layout = layout.setTileWidth(s);
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;
/** * 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; } };
cm.getTransparency(), cm.getTransferType()); sm = cm.createCompatibleSampleModel(sm.getWidth(), sm.getHeight()); Dimension tileSize = request.getTileDimensions(); if (tileSize == null) { tileSize = JAI.getDefaultTileSize(); .setTileGridYOffset(0) .setTileWidth((int) tileSize.getWidth()) .setTileHeight((int) tileSize.getHeight()); final RenderingHints renderingHints = new RenderingHints(JAI.KEY_IMAGE_LAYOUT, il); new ImageWorker(finalImage) .setRenderingHints(renderingHints) .format(il.getSampleModel(null).getDataType()) .getRenderedImage(); .makeColorTransparent(inputTransparentColor) .getRenderedImage(); hasAlpha = finalImage.getColorModel().hasAlpha(); if (!hasAlpha) { .makeColorTransparent(inputTransparentColor) .getRenderedImage(); hasAlpha = finalImage.getColorModel().hasAlpha();
/** 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(); }
assert image.getColorModel() instanceof ComponentColorModel; assert image.getSampleModel().getDataType() == DataBuffer.TYPE_BYTE; int numBands = image.getSampleModel().getNumBands(); final int numColorBands = image.getColorModel().getNumColorComponents(); final RenderingHints hints = getRenderingHints(); if (numColorBands != numBands) { ParameterBlock pb = new ParameterBlock(); pb.setSource(image, 0); pb.set(opaqueBands, 0); image = JAI.create("BandSelect", pb, hints); numBands = numColorBands; LookupTableFactory.create(tableData, image.getSampleModel().getDataType()); hints.put(JAI.KEY_TRANSFORM_ON_COLORMAP, Boolean.FALSE); ParameterBlock pb = new ParameterBlock(); PlanarImage luImage = JAI.create("Lookup", pb, hints); luImage = JAI.create("BandCombine", pb, getRenderingHints()); pb.set(roi, 3); pb.set(true, 4); image = JAI.create("BandMerge", pb, hints);
final ParameterBlock pbjImageRead = new ParameterBlock(); pbjImageRead.add(rasterFile); pbjImageRead.add(imageIndex); pbjImageRead.add(false); pbjImageRead.add(false); 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 (image.getMinX() == x && image.getMinY() == y && image.getWidth() == width && image.getHeight() == height) { return this; 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); pb.set(roi, 4); pb.set(nodata, 5); if (isNoDataNeeded()) { double destinationNoData = nodata != null image = JAI.create("Crop", pb, commonHints); invalidateStatistics(); return this;
final ImageWorker worker = new ImageWorker(image); worker.setROI(CoverageUtilities.getROIProperty(sourceCoverage)); NoDataContainer noDataProperty = CoverageUtilities.getNoDataProperty(sourceCoverage); worker.setNoData(noDataProperty != null ? noDataProperty.getAsRange() : null); 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(); if (image.getColorModel() instanceof IndexColorModel && (image.getSampleModel().getTransferType() != DataBuffer.TYPE_BYTE)) { 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();
final ColorModel cm = image.getColorModel(); if (cm instanceof IndexColorModel) { final IndexColorModel oldCM = (IndexColorModel) cm; LookupTableFactory.create(table, image.getSampleModel().getDataType()); } else { final short[] table = new short[mapSize]; 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); if (isNoDataNeeded()) { image = JAI.create("Lookup", pb, hints); int dataType = image.getSampleModel().getDataType(); pb.set(dataType, 0); image = JAI.create("Format", pb, hints); final RenderedOp alphaChannel = JAI.create("BandSelect", pb, hints);