用于图形的RGB子像素渲染?

时间:2012-07-16 15:36:43

标签: vector-graphics subpixel

我想知道是否有任何图形库支持通用图形的RGB子像素渲染(如ClearType),不仅仅支持文本。这样可以使水平分辨率几乎增加三倍,并将图形放在第三像素x位置上。

虽然我认为这会非常有用,但除了以下内容外,我在互联网上找不到多少内容:

是否有任何实现此目的的库,或者是否正在努力将这样的东西带到开罗图书馆?例如?


更新

我特指渲染技术,考虑到当前的LCD屏幕使用不同颜色的子像素。要制作白点,请将所有子像素设置为“打开”或255.白线将是几个子像素彼此叠加:

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

(其中.为全黑子像素,RGB为全亮红色,绿色或蓝色子像素) 。因为我们的眼睛无法分辨子像素,所以它们混合在一起形成一条白线。然而,我也可以从下面做出一条白线:

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

请注意,它非常清晰,但位于x = 1 1/3像素处。对于传统的渲染技术而言,这是不可能的,而这种渲染技例如,R = 70%点亮,r = 30%点亮。我没有计算出数学,这只是让你明白了:

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

另一个例子是斜率,你可以做a)全像素,b)抗锯齿,或c)子像素渲染:

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

再次注意,这只是一个粗略的例子,可以给你一般的想法,但是你看到a)是锯齿状或锯齿状的,b)模糊不清,c)像你在LCD上得到它一样锋利

对于字体显示(Windows上的ClearType和FreeType中的子像素渲染)的实际实现具有更复杂的算法。它们考虑到各个子像素相互渗透或发光,它们保留了总的颜色强度或能量。它们还考虑到子像素间距不均匀(R和G之间的间隔,或G和B(在像素中)可能小于B和R之间的间距),并且最终一些显示器具有完全不同的像素布局。

3 个答案:

答案 0 :(得分:5)

据我所知,不存在具有亚像素RGB渲染的图形库。

以下是一些可能的原因:

  • Microsoft对RGB子像素渲染技术有few patents。我不知道这些专利是否仅适用于字体光栅化,但如果没有,这可能是其他图形库不使用它的一个很好的理由。
  • 与问题中指出的一样,子像素渲染依赖于硬件实现。它适用于通过并排放置3个颜色单元(例如LCD显示器)组成颜色的显示器。对于所有其他显示类型(等离子,投影仪,旧CRT),它不起作用。
  • 子像素渲染仅添加水平分辨率。此限制对于字体光栅化不是问题,因为它通常是水平的,字体需要更高的分辨率(请参阅粗体和斜体字符和字距调整)。使用“自定义”图形,在每个轴上具有不同的分辨率会很奇怪。
  • 子像素渲染不适用于旋转显示。例如,移动设备必须同时使用RGB子像素渲染和抗锯齿。
  • 子像素渲染仅适用于显示器的原始分辨率。
  • 看起来色盲的人有子像素渲染的问题。有关详细信息,请参阅此paper
  • 在黑色背景上使用黑色白色或白色时,子像素渲染效果非常好。对于其他背景,“渲染器”必须知道背景颜色以调整子像素效果。出于这个原因,Office 2013停止使用ClearType。
  • 这更主观,但子像素渲染和抗锯齿之间的差异非常微妙。缺点和增加子像素渲染的复杂性可能不值得。

恕我直言,更好的图形的未来与Apple视网膜显示器的pixel density更高。

答案 1 :(得分:1)

有人使用ImageMagick设法获得了一些有趣的结果。方法和结果以及有趣的讨论在此处公开:https://www.imagemagick.org/discourse-server/viewtopic.php?t=19120

确实有趣的主题。但重点仍然是:该技术有多大用处,因为这样的过程只会使特定类型的显示器上的非标定图像受益?

答案 2 :(得分:0)

通过定义您自己的转换管道以将输出映射到设备像素,可以在antigrain.com上使用AGG。 见https://sourceforge.net/p/vector-agg/mailman/search/?q=LCD