Java awt Graphics2D文本呈现反别名具有深色轮廓

时间:2019-04-01 01:50:50

标签: java awt bufferedimage graphics2d text-rendering

我正在将白色文本渲染到BufferedImage上,并在白色背景上显示,以识别为什么我的文本不完美。启用AA时,即使是白色背景上的白色文字也具有深色轮廓。

最初,我认为这是由于RGB值为0的透明像素造成的,所以AA混合将导致灰色,但是我尝试用透明的白色像素冲洗图像,但不能解决问题。

请参见下面的代码,我还尝试了许多不同的渲染提示组合。

    GraphicsConfiguration graphicsConfiguration = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
    BufferedImage fontImage = graphicsConfiguration.createCompatibleImage(width, height, Transparency.TRANSLUCENT);
    Graphics2D graphics = (Graphics2D) fontImage.getGraphics();
    FontRenderContext context = graphics.getFontRenderContext();
    graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
    graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
    graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    graphics.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
    graphics.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);

    graphics.setFont(font);

    //flush all pixels with clear white
    Color c = new Color(255, 255, 255, 0);
    graphics.setColor(c);
    graphics.fillRect(0, 0, width, height);
    graphics.setColor(Color.white);
    graphics.drawString(String.valueOf(str), 0, ascent);

结果- 没有AA: enter image description here 使用AA: enter image description here

如您所见,白色文字周围有明显的深色轮廓,我希望什么也看不到。

0 个答案:

没有答案