java - Java awt Graphics2D文本渲染反别名有深色轮廓
问题描述
我正在将白色文本渲染到 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);
如您所见,白色文本周围有一个清晰的黑色轮廓,我希望什么也看不到。
解决方案
推荐阅读
- mongodb - Amazon DocumentDB 是否支持 BI 连接器?
- excel - 如何使用列名在 Excel 过滤表中选择多个不相邻的列
- ios - SwiftUI - “文本”类型的值没有成员“颜色”错误
- java - fastxml.jackson.databind 无效定义异常
- javascript - 从 JQuery.post() 中恢复数据
- substrate - 我应该如何为地方发展建立共识
- mysql - MySQL 选择 group by 和 Not Null
- python - Python Flask-Uploads 获取上传状态/进度条
- django - 如何让 django 不要求迁移?
- ios - Swift 4.1 支持 sqlite INSERT..ON CONFLICT..DO UPDATE 吗?