Рендеринг субпикселей RGB для графики?

Интересно, есть ли какая-нибудь графическая библиотека, поддерживающая субпиксельный рендеринг RGB (например, ClearType) для общей графики, не только для текста. Это позволило бы практически утроить горизонтальное разрешение и разместить графику на позициях x третьего пикселя.

Хотя я думаю, что это было бы очень полезно, я не смог найти много информации об этом в Интернете, кроме следующего:

Есть ли какая-нибудь библиотека, которая реализует это, или есть ли попытки добавить что-то подобное, например, в библиотеку Cairo?


Обновлять:

Я имею в виду конкретно методы рендеринга, учитывающие, что современные ЖК-экраны используют субпиксели разных цветов. Чтобы сделать белую точку, вы устанавливаете для всех субпикселей значение «включено» или 255. Белая линия будет состоять из нескольких субпикселей друг над другом:

...RGB...
...RGB...
...RGB...
...RGB...
...RGB...
...111...

(где . — полностью черный подпиксель, а R, G или B — полностью освещенные красный, зеленый или синий подпиксели). Поскольку наши глаза не могут различать субпиксели, они сливаются вместе, образуя белую линию. Однако я мог бы также сделать белую линию из следующего:

....GBR..
....GBR..
....GBR..
....GBR..
....GBR..
....111..

Обратите внимание, что он идеально резкий, но расположен на x = 1 1/3 пикселя. Это невозможно с традиционными методами рендеринга, которые вместо этого рисуют слегка размытую белую линию. Вот например R=70% горит, r=30% горит. Я не занимался математикой, это просто для того, чтобы вы поняли:

...RGBrgb...
...RGBrgb...
...RGBrgb...
...RGBrgb...
...RGBrgb...
...777333...

Другим примером является наклон, который вы можете сделать а) с полными пикселями, б) со сглаживанием или в) с субпиксельным рендерингом:

a)  RGB......  b)  RGB......  c)  RGB......
    RGB......      RGBrgb...      .GBR.....
    ...RGB...      rgbRGB...      ..BRG....
    ...RGB...      ...RGB...      ...RGB...
    ...RGB...      ...RGBrgb      ....GBR..
    ......RGB      ...rgbRGB      .....BRG.
    ......RGB      ......RGB      ......RGB

Опять же, обратите внимание, что это всего лишь грубый пример, чтобы дать вам общее представление, но вы видите, что а) неровный или алиасный, б) размытый и в) настолько резкий, насколько это возможно на ЖК-дисплее.

Реальные реализации этого для отображения шрифтов (ClearType в Windows и субпиксельного рендеринга в FreeType) имеют более сложный алгоритм. Они учитывают, что отдельные субпиксели перетекают или переливаются друг в друга, сохраняют общую интенсивность цвета или энергию. Они также учитывают, что расстояние между субпикселями неравномерно (расстояние между R и G или G и B (в пикселе) может быть меньше, чем между B и R), и, наконец, что некоторые дисплеи имеют совершенно другое расположение пикселей.


person jdm    schedule 16.07.2012    source источник
comment
Cairo поддерживает субпиксельное позиционирование. Все координаты имеют двойную точность. См. пример cairo_line_to.   -  person mbonnin    schedule 16.07.2012
comment
Я знаю, что вы можете использовать нецелочисленные координаты, но я имею в виду субпиксельный рендеринг RGB, а не только рендеринг со сглаживанием. Рендеринг субпикселей RGB учитывает, что каждый пиксель на ЖК-экране состоит из красного, зеленого и синего субпикселей. Я обновлю вопрос с более подробной информацией.   -  person jdm    schedule 16.07.2012
comment
Хорошо понял. на самом деле я не знал, что некоторые шрифтовые движки могут это делать (я сомневаюсь, что freetype «разбивает» пиксели на их значения RGB, не так ли?). Кроме того, это будет зависеть от фактической конфигурации матрицы RGB, поэтому может принести больше вреда, чем пользы на таких экранах, как nexus one   -  person mbonnin    schedule 16.07.2012
comment
Да, это очень зависит от расположения пикселей. Вот почему вы не должны использовать его, например, для статических изображений в Интернете. Freetype действительно может это сделать. Во всех современных дистрибутивах Linux Freetype настроен на использование сглаживания, субпиксельного рендеринга RGB и небольшого хинтинга. Небольшой хинтинг довольно хорош, он заставляет шрифты располагаться в пиксельной сетке по вертикали, но допускает свободное размещение по горизонтали, поскольку там у нас есть субпиксели. Результат довольно четкий, почти как ClearType в Windows.   -  person jdm    schedule 16.07.2012
comment
И на самом деле это не разделяет черный или белый шрифт на жесткие значения RGB, на практике он просто добавляет оттенок оранжевого или синего вокруг символов.   -  person jdm    schedule 16.07.2012


Ответы (3)


Насколько мне известно, графической библиотеки с субпиксельным RGB-рендерингом не существует.

Вот несколько возможных причин:

  • Microsoft имеет несколько патентов на технологию субпиксельного рендеринга RGB. Я не знаю, применяются ли эти патенты только к растеризации шрифтов, но если нет, то это, вероятно, очень веская причина, по которой другие графические библиотеки не используют их.
  • Как указано в вопросе, рендеринг субпикселей зависит от аппаратной реализации. Он хорошо работает с дисплеями, которые составляют цвет, размещая рядом 3 цветные ячейки (например, ЖК-монитор). Для всех остальных типов дисплеев (плазма, проекторы, старые ЭЛТ) не работает.
  • Субпиксельный рендеринг добавляет только горизонтальное разрешение. Это ограничение не является проблемой для растеризации шрифта, так как часто горизонтальному шрифту требуется большее разрешение (см. полужирные и курсивные символы и кернинг). С «нестандартной» графикой было бы странно иметь разное разрешение по каждой оси.
  • Субпиксельный рендеринг не работает с поворотным дисплеем. Например, мобильное устройство должно использовать как субпиксельный рендеринг RGB, так и сглаживание.
  • Субпиксельный рендеринг работает только с собственным разрешением дисплея.
  • Похоже, у дальтоников проблемы с субпиксельным рендерингом. Дополнительную информацию см. в этом документе.
  • Субпиксельный рендеринг очень хорошо работает с черным на белом или белым на черном фоне. С другими фонами «рендерер» должен знать цвет фона, чтобы настроить эффект субпикселя. Именно по этой причине Office 2013 перестал использовать ClearType.
  • Это более субъективно, но разница между субпиксельным рендерингом и сглаживанием очень тонкая. Минусы и дополнительная сложность субпиксельного рендеринга могут того не стоить.

ИМХО, будущее лучшей графики связано с более высокой плотностью пикселей, как у дисплея Apple Retina.

person ForguesR    schedule 28.04.2015

Кому-то удалось получить интересные результаты с помощью ImageMagick. Метод и результаты, а также интересное обсуждение представлены здесь: https://www.imagemagick.org/discourse-server/viewtopic.php?t=19120

Интересная тема, на самом деле. Но вопрос остается: насколько полезным может быть этот метод, поскольку такой процесс принесет пользу только немасштабированным изображениям на определенном типе дисплея?

person Bigue Nique    schedule 19.03.2016

С помощью AGG на сайте antigrain.com это возможно путем определения собственного конвейера преобразования для сопоставления вывода с пикселями устройства. См. https://sourceforge.net/p/vector-agg/mailman/search/?q=LCD

person martinwguy    schedule 26.10.2016