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

jdm*_*jdm 17 vector-graphics subpixel

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

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

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


更新:

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

...RGB...
...RGB...
...RGB...
...RGB...
...RGB...
...111...
Run Code Online (Sandbox Code Playgroud)

(其中,.是全黑的子象素,和R,G或者B被完全点亮红,绿,或蓝的子像素).因为我们的眼睛无法分辨子像素,所以它们混合在一起形成一条白线.然而,我也可以从以下方面做出白线:

....GBR..
....GBR..
....GBR..
....GBR..
....GBR..
....111..
Run Code Online (Sandbox Code Playgroud)

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

...RGBrgb...
...RGBrgb...
...RGBrgb...
...RGBrgb...
...RGBrgb...
...777333...
Run Code Online (Sandbox Code Playgroud)

另一个例子是斜率,你可以做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
Run Code Online (Sandbox Code Playgroud)

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

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

For*_*esR 5

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

以下是一些可能的原因:

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

恕我直言,更好的图形的未来是像苹果视网膜显示器更高的像素密度.