Я рендерил белый текст в BufferedImage и отображал его на белом фоне, чтобы определить, почему мой текст не идеален. Даже белый текст на белом фоне имеет темный контур, когда включен AA.
Изначально я полагал, что это произошло из-за того, что чистые пиксели имеют значения RGB, равные 0, поэтому смешивание АА привело бы к серому, однако я попытался очистить изображение прозрачными белыми пикселями, и это не решило проблему.
Пожалуйста, смотрите код ниже, я также пробовал много разных комбинаций подсказок рендеринга.
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);
Результаты -
нет АА:
с АА:
![enter image description here](https://i.stack.imgur.com/BVmo1.jpg)
Как вы видите, вокруг белого текста есть четкие темные контуры, я бы вообще ничего не ожидал.