1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

有些手机倒过来,能看到文字的彩边

本帖由 漂亮的石头2015-12-05 发布。版面名称:知乎日报

  1. 漂亮的石头

    漂亮的石头 版主 管理成员

    注册:
    2012-02-10
    帖子:
    487,766
    赞:
    47
    为什么将有一些手机屏幕倒过来看会看到文字的彩边,但正着看却几乎感觉不到?

    [​IMG] 匿名用户

    可能是次像素渲染(subpixel rendering)的效果。换言之,文字的「彩边」是故意的。

    先从计算机图形显示的大致原理来说。由于计算机的内部表示是离散的,所以对连续的图形,它对其中每个最小的元素——像素——进行采样,获得这一点的颜色,然后就可以把图像表示成一批像素按一定规律形成的组合。

    [​IMG]

    文泉驿点阵宋体效果图,图片来自 Habitat: FontGuide

    但这样做的话,文字的边沿就不够平滑。虽然水平和竖直的笔画效果不错,但斜向的笔画就变成了锯齿。为了处理这个问题,业界常用的抗锯齿方法大致是,先把图像按照(比方说)两倍的尺寸渲染到一个 buffer 上,然后对 buffer 再度采样,相邻的四个点取平均值。这样就会在笔画轮廓附近填上一圈灰色的像素,缓和锯齿感。这样的方法就是灰阶抗锯齿(Grayscale Antialiasing)

    [​IMG]

    图片来自 3d view - Can the 3D viewport be set to draw smooth (anti-aliased) wireframe?

    在这个基础上怎样取得更好的效果?理想情况下,一个像素是图片显示的最小单位,但在显示器上一个像素是由红绿蓝三个通道组成的,换言之每个像素依然可以继续分割。做灰阶抗锯齿时,一个像素内的三个通道是相同亮度的。这样一来,整个像素混合出来的颜色也是不同深浅的灰色。继续分割,就是分别计算三个通道的亮度,然后这个像素显示出来就是彩色。

    假设一个像素在水平方向上依次分为红绿蓝三色,如果采样的结果是这个像素的左边比右边亮,那么我们就让左边红色的通道比右边的通道更亮。

    [​IMG]

    图片来自 File:Antialias-vrs-Cromapixel.png

    这就是次像素渲染。这样渲染的结果,对计算机的内部表示,就是文字会有彩边。当你放大时,就像题主给出的图那样明显。但你在显示器上按照原来的尺寸显示时,得到的就是平滑的曲线。毕竟屏幕上没有单独的白色通道,所有的颜色都是相邻的 RGB 通道复合而来。只不过当你的眼睛里屏幕足够远、像素足够小,小到你分不清每个像素中的每个通道时,你就看不出来了。类似的,像素虽然非常大,但你隔很远观看也看不出来单个像素的 LED 广告。

    [​IMG]

    图片来自 https://upload.wikimedia.org/wikipe..._2013.jpg/640px-1_times_square_night_2013.jpg

    另一方面,正因为次像素渲染依赖显示器的硬件细节,所以需要比较多的设置。例如有的时候你需要选择你的屏幕的 RGB 方向。对于手机这样的移动设备,屏幕旋转一下都需要针对 RGB 通道的新排列重新渲染。

    查看知乎原文
     
正在加载...