Рендеринг Шрифта Java: общий AA должен действительно быть выключен для субпикселя AA?

Я пытался улучшить свою систему GUI, записанную в Java для использования субпиксельного сглаживания, и был успешен, за исключением одной остающейся аномалии. Это - следование по моему другому вопросу со вчерашнего дня.

Остающаяся проблема состоит в том, что установка подсказок рендеринга, KEY_ANTIALIASING к VALUE_ANTIALIAS_ON заставляет KEY_TEXT_ANTIALIASING быть проигнорированным, когда это установлено на жидкокристаллический дисплей (субпиксель) значение AA. Кто-либо может пролить некоторый свет на это? В настоящее время я вынужден к VALUE_ANTIALIAS_OFF прежде, чем представить текст и снова включаю его после рендеринга текста (так, чтобы другое рисование, как круги, и т.д., было AA'd).

Эта проблема доказана автономной тестовой программой ниже. Как Вы видите, выполняете ли Вы его, круг красится AA, когда шрифт не, и наоборот. Было бы хорошо предварительно сконфигурировать AA для работы на все рисование.


Сам содержавшая тестовая программа

import java.awt.*;
import java.awt.event.*;

public class AwtTestFrame1c extends Panel {

AwtTestFrame1c() {
    setBackground(SystemColor.control);
    }

public void paint(Graphics gc) {
    Graphics2D                          g2d = (Graphics2D)gc;
    int                                 py=0;

    py=paintText(g2d,py,RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB,true );
    py=paintText(g2d,py,RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB,false);
    }

private int paintText(Graphics2D dgc, int py, Object val, boolean aa) {
    char[]                              txt=("The quick brown fox jumped over the lazy dog ("+val+", General AA: "+aa+")").toCharArray();

    if(aa        ) { dgc.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON ); }
    else           { dgc.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF); }
    if(val !=null) { dgc.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,val);                           }
    dgc.setFont(font);

    dgc.drawOval(5,py+5,15,15);
    dgc.drawChars(txt,0,txt.length,30,py+line-5);

    return (py+line);
    }

static private final Font                      font=new Font("SansSerif",Font.PLAIN,16);
static private final int                       line=25;

static public void main(String[] args) {
    Frame                               wnd=new Frame("AWT Antialiased Text Sample");

    wnd.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
            }
        });
    wnd.add(new AwtTestFrame1c());
    wnd.setSize(new Dimension(1000, 300));
    wnd.setVisible(true);
    }

}

6
задан Community 23 May 2017 в 12:26
поделиться

2 ответа

Немного покопавшись, мы обнаружили следующее: ошибка 6263951 .

Видимо перебор исправлен в b17? Я не совсем уверен, как интерпретировать отчет об ошибке.

Определенно сломан здесь, на 1.6.0_17-b04 (MacOS X 10.5).

1
ответ дан 17 December 2019 в 18:16
поделиться

Я обновлял VirtualBox, так что я сделал снимки. Возможно, я просто вижу рендеринг хоста, но подозреваю, что он также зависит от реализации.

Ubuntu 9.10AwtTestFrame Ubuntu Mac OS X 10.5AwtTestFrame Mac Windows 7AwtTestFrame WIn

2
ответ дан 17 December 2019 в 18:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: