Java awt Graphics2D текстовый сглаживающий псевдоним имеет темный контур - PullRequest
0 голосов
/ 01 апреля 2019

Я рендерил белый текст в 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 с АА: enter image description here

Как вы видите, вокруг белого текста есть четкие темные контуры, я бы вообще ничего не ожидал.

...