private int countBands(List<GridCoverage2D> coverages) { int count = 0; for (GridCoverage2D coverage : coverages) { count += coverage.getRenderedImage().getSampleModel().getNumBands(); } return count; }
/** * 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; }
Errors.format(ErrorKeys.NULL_ARGUMENT_$1, "transparentColor")); final ColorModel cm = image.getColorModel(); if (cm instanceof IndexColorModel) { return maskIndexColorModel(transparentColor); } else if (cm instanceof ComponentColorModel) { switch (image.getSampleModel().getDataType()) { case DataBuffer.TYPE_BYTE:
ColorModel firstColorModel = first.getColorModel(); SampleModel firstSampleModel = first.getSampleModel(); int firstDataType = firstSampleModel.getDataType(); int firstBands = firstSampleModel.getNumBands(); int firstSampleSize = firstSampleModel.getSampleSize()[0]; boolean hasIndexedColorModels = firstColorModel instanceof IndexColorModel; for (int i = 1; i < numSources; i++) { RenderedImage source = (RenderedImage) sources.get(i); SampleModel sourceSampleModel = source.getSampleModel(); ColorModel sourceColorModel = source.getColorModel(); int sourceBands = sourceSampleModel.getNumBands(); int sourceDataType = sourceSampleModel.getDataType(); if (sourceDataType == DataBuffer.TYPE_UNDEFINED) { hasUnsupportedTypes = true;
/** * Forces the {@linkplain #image} color model to the {@linkplain ColorSpace#CS_sRGB RGB color * space}. If the current color space is already of {@linkplain ColorSpace#TYPE_RGB RGB type}, * then this method does nothing. This operation may loose the alpha channel. * * @return this {@link ImageWorker}. * @see #isColorSpaceRGB * @see ColorConvertDescriptor */ public final ImageWorker forceColorSpaceRGB() { if (!isColorSpaceRGB()) { final ColorModel cm = new ComponentColorModel( ColorSpace.getInstance(ColorSpace.CS_sRGB), false, false, Transparency.OPAQUE, image.getSampleModel().getDataType()); // force computation of the new colormodel forceColorModel(cm); } // All post conditions for this method contract. assert isColorSpaceRGB(); return this; }
assert inputImage.getSampleModel().getNumBands() == 1 : inputImage; final int dataType = inputImage.getSampleModel().getDataType(); RenderedImage result = inputImage; if (!Double.isNaN(gammaValue) && Math.abs(gammaValue - 1.0) > 1E-6) { assert result.getSampleModel().getNumBands() == 1 : result; return result;
defaultCM = sampleImage.getColorModel(); defaultSM = sampleImage.getSampleModel(); if (defaultCM instanceof IndexColorModel) { defaultPalette = Utils.extractPalette((IndexColorModel) defaultCM);
private GridSampleDimension[] getSampleDimensions(final RenderedImage coverageRaster) throws IOException { GridSampleDimension[] bands = rasterInfo.getGridSampleDimensions(); // may the image have been promoted? build the correct band info then final int imageBands = coverageRaster.getSampleModel().getNumBands(); if (bands.length == 1 && imageBands > 1) { LOGGER.fine( coverageName + " was promoted from 1 to " + coverageRaster.getSampleModel().getNumBands() + " bands, returning an appropriate set of GridSampleDimension"); // stolen from super.createCoverage: final ColorModel cm = coverageRaster.getColorModel(); bands = new GridSampleDimension[imageBands]; // setting bands names. for (int i = 0; i < imageBands; i++) { final ColorInterpretation colorInterpretation; colorInterpretation = TypeMap.getColorInterpretation(cm, i); if (colorInterpretation == null) { throw new IOException("Unrecognized sample dimension type"); } bands[i] = new GridSampleDimension(colorInterpretation.name()); } } return bands; }
currentSourceCoverage .getRenderedImage() .getSampleModel() .getDataType()); layout = new ImageLayout(); layout.setColorModel(cm); if (hasAlpha && !op.getColorModel().hasAlpha()) { intermediateOps.add(op); op = w.format(op.getSampleModel().getDataType()).getRenderedImage(); final GridSampleDimension[] sd = new GridSampleDimension[op.getSampleModel().getNumBands()]; for (int i = 0; i < sd.length; i++) sd[i] = new GridSampleDimension( TypeMap.getColorInterpretation(op.getColorModel(), i).name());
@Test public void testBandsFlagsView() throws Exception { // creation in the setup would have failed before the fix for // [GEOT-6168] CoverageView setup fails if one of the source bands has an indexed color // model CoverageInfo info = getCatalog().getCoverageByName(BANDS_FLAGS_VIEW); GridCoverageReader reader = info.getGridCoverageReader(null, null); GridCoverage2D coverage = (GridCoverage2D) reader.read(null); assertEquals(11, coverage.getRenderedImage().getSampleModel().getNumBands()); coverage.dispose(true); } }
@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(); }
final ColorModel cm = loadedImage.getColorModel(); hasAlpha |= cm.hasAlpha(); loadedImage.getSampleModel().getDataType())
@Override RenderedImage process( ImageWorker inputWorker, Hints hints, Map<String, Expression> parameters) { RenderedImage inputImage = inputWorker.getRenderedImage(); assert inputImage.getSampleModel().getNumBands() == 1 : inputImage; final int dataType = inputImage.getSampleModel().getDataType(); if (dataType == DataBuffer.TYPE_BYTE) { // // Optimisation for byte images m we use lookup // LookupTable table = createByteLookupTable(EMPTY_MAP); inputWorker.lookup(table); return inputWorker.getRenderedImage(); } // General case // define a specific piecewise for the logarithm // // STEP 1 do the extrema // inputWorker.removeRenderingHints(); final double[] minimum = inputWorker.getMinimums(); final double[] maximum = inputWorker.getMaximums(); // // STEP 2 use generic piecewise // final PiecewiseTransform1D<DefaultPiecewiseTransform1DElement> transform = generatePiecewise(setMinMaxParams(minimum[0], maximum[0])); inputWorker.piecewise(transform, Integer.valueOf(0)); return inputWorker.getRenderedImage(); }
throws IOException { final boolean hasPalette = image.getColorModel() instanceof IndexColorModel; final boolean hasColorModel = hasPalette ? false : image.getColorModel() instanceof ComponentColorModel; if (paletted && !hasPalette) { IndexColorModel icm = (IndexColorModel) image.getColorModel(); new ImageTypeSpecifier(image.getColorModel(), image.getSampleModel())); } else {
image2 = normalizeImage(image2); this.bands = image1.getSampleModel().getNumBands(); final boolean hasAlpha = image1.getColorModel().hasAlpha(); if (bands > 4 || (bands == 2 && !hasAlpha) || (bands == 3 && hasAlpha)) { throw new IllegalArgumentException(
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) { LookupTableFactory.create(tableData, image.getSampleModel().getDataType());
/** * Returns the number of bands in the {@linkplain #image}. * * @see #retainBands * @see #retainFirstBand * @see SampleModel#getNumBands */ public final int getNumBands() { return image.getSampleModel().getNumBands(); }
@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(); }
? IHSColorSpaceJAIExt.getInstance() : IHSColorSpace.getInstance(); final int numBits = image.getColorModel().getComponentSize(0); final ColorModel ihsColorModel = new ComponentColorModel( false, Transparency.OPAQUE, image.getSampleModel().getDataType());
@Override RenderedImage process( ImageWorker inputWorker, Hints hints, Map<String, Expression> parameters) { RenderedImage inputImage = inputWorker.getRenderedImage(); assert inputImage.getSampleModel().getNumBands() == 1 : inputImage; final int dataType = inputImage.getSampleModel().getDataType(); if (dataType == DataBuffer.TYPE_BYTE) { // // Optimisation for byte images // LookupTable table = createByteLookupTable(EMPTY_MAP); inputWorker.lookup(table); return inputWorker.getRenderedImage(); } // General case, we use the piecewise1D transform // // STEP 1 do the extrema // inputWorker.removeRenderingHints(); final double[] minimum = inputWorker.getMinimums(); final double[] maximum = inputWorker.getMaximums(); // // STEP 2 use generic piecewise // final PiecewiseTransform1D<DefaultPiecewiseTransform1DElement> transform = generatePiecewise(setMinMaxParams(minimum[0], maximum[0])); inputWorker.piecewise(transform, Integer.valueOf(0)); return inputWorker.getRenderedImage(); }