[ https://issues.apache.org/jira/browse/PIVOT-723?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sandro Martini updated PIVOT-723: --------------------------------- Fix Version/s: 2.1 > Better GrayscaleDecorator > ------------------------- > > Key: PIVOT-723 > URL: https://issues.apache.org/jira/browse/PIVOT-723 > Project: Pivot > Issue Type: Improvement > Components: wtk-effects > Affects Versions: 2.0 > Reporter: Bill van Melle > Priority: Minor > Fix For: 2.1 > > Attachments: error-round.png > > > The current GrayscaleDecorator doesn't work properly when the decorated > component uses transparency -- it turns the transparent pixels black, which > seems unlikely to be what you want. Here's a new version of > GrayscaleDecorator#prepare that creates the BufferedImage in a > transparency-aware way: > public Graphics2D prepare(Component component, Graphics2D graphics) { > this.graphics = graphics; > int width = component.getWidth(); > int height = component.getHeight(); > > // To convert to gray, we create a BufferedImage in the grayscale > color space > // into which the decorated component draws, and we output the > resulting image. > // The naive way to create the buffer is > // new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); > // but that doesn't respect transparency. Hence the following more > complicated method. > > if (bufferedImage == null > || bufferedImage.getWidth() < width > || bufferedImage.getHeight() < height) { > ColorSpace gsColorSpace = > ColorSpace.getInstance(ColorSpace.CS_GRAY); > ComponentColorModel ccm = new ComponentColorModel(gsColorSpace, > true, false, > > Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); > WritableRaster raster = ccm.createCompatibleWritableRaster(width, > height); > bufferedImage = new BufferedImage(ccm, raster, > ccm.isAlphaPremultiplied(), null); > } > bufferedImageGraphics = bufferedImage.createGraphics(); > bufferedImageGraphics.setClip(graphics.getClip()); > return bufferedImageGraphics; > } -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira