虽然我认为这是非常有用的,但我在互联网上找不到很多,除了以下内容:
> How Sub-Pixel Font Rendering Works(中间有一些线图)
> Subpixel rendering and image resizing(应用子像素渲染来调整位图大小的一些有趣的想法)
有没有实现这一点的图书馆,还是有努力把这样的东西带到开罗图书馆呢?
更新:
我专门提到了考虑到当前LCD屏幕使用不同颜色的子像素的渲染技术。要使一个白点,您将所有子像素设置为“开”或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)全像素,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)是一样清晰,你可以得到它在液晶显示器上。
对于字体显示(Windows上的ClearType和FreeType中的子像素渲染),实际的实现具有更复杂的算法。他们考虑到各个子像素渗透或相互照射,它们保留了总色彩强度或能量。他们还考虑到子像素间距不均匀(R和G之间的间距,或G和B(像素中的间距)可能小于B和R之间),最后一些显示器具有完全不同的像素布局。
解决方法
以下是几个可能的原因:
>微软在RGB子像素渲染技术上拥有few patents。我不知道这些专利是否仅适用于字体光栅化,但如果不是,则可能是其他图形库不使用它的一个很好的原因。
像这个问题一样,子像素渲染依靠硬件实现。它与通过并排3个彩色单元(例如LCD显示器)组合颜色的显示器工作良好。对于所有其他显示类型(等离子,投影机,旧CRT),它不起作用。
子像素渲染仅增加水平分辨率。这种限制对于字体光栅化来说不是问题,因为它通常是水平的字体需要更多的分辨率(请参阅粗体和斜体字符和字距调整)。使用“自定义”图形,在每个轴上具有不同的分辨率是奇怪的。
子像素渲染不适用于旋转显示。例如,移动设备必须使用RGB子像素渲染和抗锯齿。
>子像素渲染仅适用于显示器的原始分辨率。
>看起来色盲人有子像素渲染的问题。有关更多信息,请参阅paper。
子像素渲染在黑色背景上的白色或白色黑色非常好。与其他背景相反,“渲染器”必须知道背景颜色以调整子像素效果。由于这个原因,Office 2013停止使用ClearType。
>这更主观,但子像素渲染和抗锯齿之间的区别是非常微妙的。子像素渲染的缺点和增加的复杂性可能不值得。
IMHO,未来更好的图形是与pixel density更高像苹果视网膜显示。