private void handleStyling( RasterStyling styling, AbstractRaster raster ) { BufferedImage img = null; if ( styling.channelSelection != null ) { // Compute channel selection indexes on current raster styling.channelSelection.evaluate( raster.getRasterDataInfo().bandInfo ); } // TODO maybe reorder this a bit if ( styling.shaded != null ) { raster = performHillShading( raster, styling ); } if ( styling.channelSelection != null ) { raster = evaluateChannelSelections( styling.channelSelection, raster ); } if ( styling.contrastEnhancement != null ) { raster = performContrastEnhancement( raster, styling.contrastEnhancement ); } if ( styling.opacity != 1 ) { LOG.trace( "Using opacity: {}", styling.opacity ); graphics.setComposite( AlphaComposite.getInstance( AlphaComposite.SRC_OVER, (float) styling.opacity ) ); } img = handleFunctions( styling, raster ); LOG.trace( "Rendering raster..." ); if ( img != null ) { render( img, raster.getEnvelope() ); } else { render( raster ); } LOG.trace( "Done rendering raster." ); handleOutline( styling, raster ); }
@Override public void render( RasterStyling styling, AbstractRaster raster ) { LOG.debug( "Rendering raster with style '{}'.", styling ); if ( raster == null ) { LOG.warn( "Trying to render null raster." ); return; } if ( styling == null ) { LOG.debug( "Raster style is null, rendering without style" ); render( raster ); return; } handleStyling( styling, raster ); }
List<LegendItem> prepareLegend( Style style, Graphics2D g, int width, int height ) { Pair<Integer, Integer> p = getLegendSize( style ); Envelope box = geofac.createEnvelope( 0, 0, p.first, p.second, null ); Java2DRenderer renderer = new Java2DRenderer( g, width, height, box ); Java2DTextRenderer textRenderer = new Java2DTextRenderer( renderer ); Java2DRasterRenderer rasterRenderer = new Java2DRasterRenderer( g, width, height, box ); return LegendItemBuilder.prepareLegend( style, renderer, textRenderer, rasterRenderer ); }
newData = setEnhancedChannelData( newData, rasutil, redIndex, 0, channels.channelContrastEnhancements.get( "red" ) ); rasutil.precomputeContrastEnhancements( greenIndex, channels.channelContrastEnhancements.get( "green" ) ); newData = setEnhancedChannelData( newData, rasutil, greenIndex, 1, channels.channelContrastEnhancements.get( "green" ) ); rasutil.precomputeContrastEnhancements( blueIndex, channels.channelContrastEnhancements.get( "blue" ) ); newData = setEnhancedChannelData( newData, rasutil, blueIndex, 2, channels.channelContrastEnhancements.get( "blue" ) ); data.getDataInfo().interleaveType, false ); newData = setEnhancedChannelData( newData, rasutil, grayIndex, 0, channels.channelContrastEnhancements.get( "gray" ) );
private void render( final AbstractRaster raster ) { render( RasterFactory.imageFromRaster( raster ), raster.getEnvelope() ); }
/** * Perform contrast enhancement on one channel and copy the result to a RasterData object. * * @param newData * RasterData output container * @param rasutil * channel data source * @param inIndex * input channel index * @param outIndex * output channel index * @param enhancement * ContrastEnhancement to perform * @return modified RasterData container */ private RasterData setEnhancedChannelData( RasterData newData, RasterDataUtility rasutil, int inIndex, int outIndex, ContrastEnhancement enhancement ) { int i = 0, j = 0, val = 0, cols = newData.getColumns(), rows = newData.getRows(); rasutil.setContrastEnhancement( enhancement ); if ( enhancement != null ) { LOG.trace( "Using gamma {} for channel '{}'...", enhancement.gamma, inIndex ); } for ( i = 0; i < cols; i++ ) for ( j = 0; j < rows; j++ ) { val = (int) rasutil.getEnhanced( i, j, inIndex ); newData.setByteSample( i, j, outIndex, int2byte( val ) ); } return newData; }
public Java2DRenderContext( RenderingInfo info, Graphics2D graphics, OutputStream outputStream ) { this.graphics = graphics; this.outputStream = outputStream; renderer = new Java2DRenderer( graphics, info.getWidth(), info.getHeight(), info.getEnvelope(), info.getPixelSize() * 1000 ); textRenderer = new Java2DTextRenderer( renderer ); labelRenderer = new Java2DLabelRenderer( renderer, textRenderer ); rasterRenderer = new Java2DRasterRenderer( graphics ); tileRenderer = new Java2DTileRenderer( graphics, info.getWidth(), info.getHeight(), info.getEnvelope() ); }
/** * Performs contrast enhancement on all bands of a raster and returns the modified raster. * * @param raster * initial raster * @param contrastEnhancement * @return the enhanced raster */ private AbstractRaster performContrastEnhancement( AbstractRaster raster, ContrastEnhancement contrastEnhancement ) { if ( contrastEnhancement == null ) return raster; LOG.trace( "Enhancing contrast for overall raster..." ); RasterData data = raster.getAsSimpleRaster().getRasterData(), newData = data; RasterDataUtility rasutil = new RasterDataUtility( raster ); rasutil.setContrastEnhancement( contrastEnhancement ); rasutil.precomputeContrastEnhancements( -1, contrastEnhancement ); for ( int band = 0; band < data.getBands(); band++ ) newData = setEnhancedChannelData( newData, rasutil, band, band, contrastEnhancement ); AbstractRaster newRaster = new SimpleRaster( newData, raster.getEnvelope(), raster.getRasterReference(), null ); return newRaster; }