Ответ 1
Графический контекст использует целочисленные показатели по умолчанию - это означает, что округление применяется к векторам местоположения форм глифов.
Вы можете переключиться на дробные показатели, используя:
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
Как вы можете видеть, не использовалось субпиксельное сглаживание (только серый пиксель сглаживания). Вы можете включить сглаживание подпикселей для лучшей разборчивости на ЖК-экранах:
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
Существует 4 режима:
-
VALUE_TEXT_ANTIALIAS_LCD_HRGB
: горизонтально ориентированный RGB -
VALUE_TEXT_ANTIALIAS_LCD_HBGR
: горизонтально ориентированный BGR -
VALUE_TEXT_ANTIALIAS_LCD_VRGB
: вертикально ориентированный RGB -
VALUE_TEXT_ANTIALIAS_LCD_VBGR
: вертикально ориентированный BGR
Я не узнал, где запросить соответствующее значение текущего отображения и ориентации. Некоторые дисплеи можно наклонять (пейзаж/портрет) или даже поворачивать, требуя повторного отображения режима при рисовании.
ИЗМЕНИТЬ
Я нашел что-то в Filthy Rich Clients: очевидно, Java AWT Toolkit может предоставить соответствующие подсказки рендеринга:
Map<?, ?> desktopHints =
(Map<?, ?>) Toolkit.getDefaultToolkit().getDesktopProperty("awt.font.desktophints");
Graphics2D g2d = (Graphics2D) g;
if (desktopHints != null) {
g2d.setRenderingHints(desktopHints);
}
// no need to set more rendering hints
В моей системе это делает текст с дробными метриками и сглаживанием LCD HRGB, как и с приведенным выше кодом. В моей системе есть подсказки:
- Клавиша включения сглаживания текста: Текстовый режим сглаживания ЖК-экрана HRGB
- Контекстно-зависимая клавиша ЖК-дисплея: 120