final double[] maximum = worker.getMaximums();
@Test public void testPaintSelectionSupportingReader() throws Exception { ReferencedEnvelope mapExtent = new ReferencedEnvelope(0, 90, 0, 90, DefaultGeographicCRS.WGS84); GridCoverage2DReader reader = new TestSingleBandReader(2); GridCoverageRenderer renderer = new GridCoverageRenderer( DefaultGeographicCRS.WGS84, mapExtent, new Rectangle(0, 0, 100, 100), null); // keeping a reference to the raster symbolizer so we can check we has not altered // during the band setup the raster symbolizer channel selection needs to be rearranged // but the original raster symbolizer should not be altered RasterSymbolizer rasterSymbolizer = buildChannelSelectingSymbolizer(3); BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_3BYTE_BGR); Graphics2D graphics = (Graphics2D) bi.getGraphics(); // .. the reader here checks the band selection params were passed down renderer.paint( graphics, reader, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.BLACK); // check we got a gray image final double[] minimums = new ImageWorker(bi).getMaximums(); final double[] maximums = new ImageWorker(bi).getMaximums(); assertThat(maximums[0], equalTo(maximums[1])); assertThat(maximums[1], equalTo(maximums[2])); assertThat(minimums[0], equalTo(minimums[1])); assertThat(minimums[1], equalTo(minimums[2])); }
@Test public void testPaintBandSelectionNonSupportingReader() throws Exception { File coverageFile = TestData.copy(this, "geotiff/worldPalette.tiff"); assertTrue(coverageFile.exists()); GridCoverage2DReader reader = new GeoTiffReader(coverageFile); RasterSymbolizer rasterSymbolizer = buildChannelSelectingSymbolizer(1); BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_3BYTE_BGR); GridCoverageRenderer renderer = new GridCoverageRenderer( DefaultGeographicCRS.WGS84, ReferencedEnvelope.reference(reader.getOriginalEnvelope()), new Rectangle(0, 0, 100, 100), null); Graphics2D graphics = (Graphics2D) bi.getGraphics(); renderer.paint( graphics, reader, null, rasterSymbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.BLACK); graphics.dispose(); // check we got a gray image final double[] minimums = new ImageWorker(bi).getMaximums(); final double[] maximums = new ImageWorker(bi).getMaximums(); assertThat(maximums[0], equalTo(maximums[1])); assertThat(maximums[1], equalTo(maximums[2])); assertThat(minimums[0], equalTo(minimums[1])); assertThat(minimums[1], equalTo(minimums[2])); }
@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(); }
@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(); }
private void applyAndAssertContrastEnhancement(GridCoverage2DReader reader) throws TransformException, NoninvertibleTransformException, FactoryException, IOException { ReferencedEnvelope mapExtent = new ReferencedEnvelope(0, 90, 0, 90, DefaultGeographicCRS.WGS84); GridCoverageRenderer renderer = new GridCoverageRenderer( DefaultGeographicCRS.WGS84, mapExtent, new Rectangle(0, 0, 255, 255), null); int min = 10; int max = 100; RasterSymbolizer symbolizer = createClippingChannelSelectionSymbolizer(min, max); RenderedImage image = renderer.renderImage( reader, null, symbolizer, Interpolation.getInstance(Interpolation.INTERP_NEAREST), Color.BLACK, 256, 256); assertEquals(3, image.getSampleModel().getNumBands()); // Make sure clip occurred even with optimized band selection ImageWorker worker = new ImageWorker(image); double[] maximums = worker.getMaximums(); assertEquals(max, maximums[0], 0d); assertEquals(max + 20, maximums[1], 0d); assertEquals(max + 40, maximums[2], 0d); ImageUtilities.disposeImage(image); }
RenderedImage inputImage = inputWorker.getRenderedImage(); extrema[0] = inputWorker.getMinimums(); extrema[1] = inputWorker.getMaximums(); final int numBands = extrema[0].length; assert numBands == 1 : inputWorker.getRenderedOperation();
256); assertEquals(1, image.getSampleModel().getNumBands()); assertEquals(0, new ImageWorker(image).getMaximums()[0], 0d); ImageUtilities.disposeImage(image);
/** * Collects stats for future dataPacking from the provided coverage and update the statistics. * * @param coverage The coverage on which the statistics will be collected * @param statsList The list of statistic beans, one per image band */ protected void collectStats(GridCoverage2D coverage, List<DataPacking.DataStats> statsList) { // It will internally take care of noData ImageWorker iw = new ImageWorker(coverage.getRenderedImage()); double[] minimum = iw.getMinimums(); double[] maximum = iw.getMaximums(); int count = Math.min(minimum.length, statsList.size()); for (int i = 0; i < count; i++) { DataPacking.DataStats stats = statsList.get(i); double min = minimum[i]; double max = maximum[i]; stats.update(min, max); } }
final double[] maximum = w.getMaximums();
/** * Collects stats for future dataPacking from the provided coverage and update * the statistics. * * @param coverage * @param statsParams */ private void collectStats(GridCoverage2D coverage, double[] statsParams) { // It will internally take care of noData ImageWorker iw = new ImageWorker(coverage.getRenderedImage()); double[] minimum = iw.getMinimums(); double[] maximum = iw.getMaximums(); double min = minimum[0]; double max = maximum[0]; stats.update(min,max); }
ImageWorker worker = new ImageWorker(output.getRenderedImage()); double min[] = worker.getMinimums(); double max[] = worker.getMaximums(); max = worker.getMaximums(); max = worker.getMaximums(); worker.setNoData(RangeFactory.create(0, 0)); min = worker.getMinimums(); max = worker.getMaximums(); worker.setNoData(RangeFactory.create(0, 0)); min = worker.getMinimums(); max = worker.getMaximums(); worker.setNoData(RangeFactory.create(0, 0)); min = worker.getMinimums(); max = worker.getMaximums(); worker.setNoData(RangeFactory.create(0, 0)); min = worker.getMinimums(); max = worker.getMaximums(); worker.setNoData(RangeFactory.create(0, 0)); min = worker.getMinimums(); max = worker.getMaximums(); worker = new ImageWorker(output.getRenderedImage());
@Test public void testMaskedNoAPH() throws Exception { // used to fail when hitting a tiff with ROI with reprojection (thus buffer) in an area // close to, but not hitting, the ROI GeoServer gs = getGeoServer(); WMSInfo wms = gs.getService(WMSInfo.class); Serializable oldValue = wms.getMetadata().get(WMS.ADVANCED_PROJECTION_KEY); try { wms.getMetadata().put(WMS.ADVANCED_PROJECTION_KEY, false); gs.save(wms); BufferedImage image = getAsImage( "wms/reflect?layers=" + getLayerId(MASKED) + "&SRS=AUTO%3A97002%2C9001%2C-1%2C40&BBOX=694182%2C-4631295%2C695092%2C-4630379&format=image/png&transparent=true", "image/png"); // transparent model assertTrue(image.getColorModel().hasAlpha()); assertThat(image.getColorModel(), instanceOf(ComponentColorModel.class)); double[] maximums = new ImageWorker(image).getMaximums(); // last band, alpha, is fully at zero, so transparent assertEquals(0, maximums[maximums.length - 1], 0d); } finally { wms.getMetadata().put(WMS.ADVANCED_PROJECTION_KEY, oldValue); gs.save(wms); } }
assertEquals(29.0, new ImageWorker(targetCoverage.getRenderedImage()).getMaximums()[0]); } finally { try { assertEquals(29.0, new ImageWorker(targetCoverage.getRenderedImage()).getMaximums()[0]); } finally { try {
assertEquals(29.0, new ImageWorker(targetCoverage.getRenderedImage()).getMaximums()[0]); } finally { try { assertEquals(29.0, new ImageWorker(targetCoverage.getRenderedImage()).getMaximums()[0]); } finally { try {