private BufferedImage buildLegend( GetLegendGraphic req, Legends renderer, Style style, boolean originalSize, HashMap<String, BufferedImage> legendMap ) { BufferedImage img = MapService.prepareImage( req ); Graphics2D g = img.createGraphics(); g.setRenderingHint( KEY_ANTIALIASING, VALUE_ANTIALIAS_ON ); g.setRenderingHint( KEY_TEXT_ANTIALIASING, VALUE_TEXT_ANTIALIAS_ON ); renderer.paintLegend( style, req.getWidth(), req.getHeight(), g ); g.dispose(); if ( req.getFormat().equals( "image/png; mode=8bit" ) || req.getFormat().equals( "image/png; subtype=8bit" ) || req.getFormat().equals( "image/gif" ) ) { img = postprocessPng8bit( img ); } if ( originalSize ) { legendMap.put( req.getFormat(), img ); } return img; }
/** * @param req * should be a GetMap or GetLegendGraphic * @return an empty image conforming to the request parameters */ public static BufferedImage prepareImage( Object req ) { String format = null; int width = 0, height = 0; Color bgcolor = null; boolean transparent = false; if ( req instanceof GetLegendGraphic ) { GetLegendGraphic glg = (GetLegendGraphic) req; format = glg.getFormat(); width = glg.getWidth(); height = glg.getHeight(); transparent = true; } else { return null; } return ImageUtils.prepareImage( format, width, height, transparent, bgcolor ); }
BufferedImage getLegend( GetLegendGraphic req ) { Legends renderer = new Legends( req.getLegendOptions() ); Style style = findLegendStyle( req.getLayer(), req.getStyle() ); Pair<Integer, Integer> size; if ( renderer.getLegendOptions().isDefault() ) { size = getLegendSize( style ); } else { size = renderer.getLegendSize( style ); } if ( req.getWidth() == -1 ) { req.setWidth( size.first ); } if ( req.getHeight() == -1 ) { req.setHeight( size.second ); } boolean originalSize = req.getWidth() == size.first && req.getHeight() == size.second && renderer.getLegendOptions().isDefault(); HashMap<String, BufferedImage> legendMap = legends.get( style ); if ( originalSize && legendMap != null && legendMap.get( req.getFormat() ) != null ) { return legendMap.get( req.getFormat() ); } if ( legendMap == null ) { legendMap = new HashMap<String, BufferedImage>(); legends.put( style, legendMap ); } return buildLegend( req, renderer, style, originalSize, legendMap ); }