Skip navigation.

flying in the way of my own...

Posts tagged with "Font"

Linux下LCD屏幕字体显示的优化

, , ,

之前都是用去掉anti alias的字体来显示英文的,前几天看邮件的时候突然发现用AA的字体看这些比较长的东西眼睛会舒服得多,因此有个想法把字体的风格改成这种柔和的而不是以前那种尖锐的。经过了几天的修改和测试,已经有了一个比较不错的字体显示,总结一下经验:
这篇文章对linux下字体的设置有了一个比较全面的讲解,而且总结的比较好,不过对于LCD的屏幕,我想补充两点。

1.就是屏幕解析度的设置(dpi)。Windows默认的dpi(Dots per inch)是96,因此也有人喜欢设置成这个样子的,但是这不一定就是某个特定屏幕的解析度。因为每个液晶屏幕都有一个Native Resolution,也就是说在这个分辨率下最清晰,而它也有它固定的物理尺寸。举个例子,比如一个LCD显示器的Native Resolution是1024x768,而他的长度是286mm(1 inch = 25.4 mm),它横向的dpi就是 1024*25.4/286=90 dpi,所以应该设置成90而不是96.而如果dpi设置的不对的话,字体可能显示的不是很清晰,尤其是gtk的程序。因此这是需要注意的。具体应该这样设置:先找一把尺子量一量自己屏幕的长和宽(我不是在开玩笑),比如是286mm 214mm,在xorg.conf文件里面加入一句:
 DisplaySize 286 214
,重启x以后x会自动计算dpi。然后计算一下正确的dpi是什么,假设是90,在/etc/fonts/local.conf里面添加一句
<match target="pattern">
  <edit name="dpi" mode="assign"><double>90</double></edit>
 </match>

就可以了。

2.sub-pixel亚像素微调。这里要说一点LCD显示器的原理。它的每一个像素其实是由三个亚像素(小一点的像素)组成的,一个红的,一个绿的,一个蓝的。它们一起够成了我们平时所看到的像素。因此如果以亚像素为单位,其实把我们的屏幕横向的分辨率扩大了三倍,因此在抗锯齿的时候可以做得更细致,而在多出一两个亚像素时我们的眼睛是分辨不出它们的颜色来的,因为它们还是按照rgb(或bgr)的顺序来排列的。所以使用亚像素微调会带来更好的显示效果。此时面临的一个问题就是,LCD屏幕制造的时候,不同种类屏幕rgb三种亚像素的排列顺序是不同的,也就是说,有的是rgb的顺序,有的是bgr的顺序,所以亚像素微调还要设置一下顺序。我们怎么才能知道自己屏幕是什么样的顺序呢?可以用这篇文章中的两幅图片来测试一下:




第一张图片是用rgb的顺序进行的亚像素微调,而第二张是bgr,如果你发现某一幅图片很清晰,线条比较平滑而另一张看上去非常糟,那么你的屏幕的rgb顺序就跟是清晰的那张图片一样。知道了这个以后,就只是简单的在~/.fonts.conf或者/etc/local.conf里面加上下面这一段(假设是rgb)就OK了:

<match target="font" >
  <edit mode="assign" name="rgba" >
   <const>rgb</const>
  </edit>
 </match>


本文参考了一下文章:
How Sub-Pixel Font Rendering Works
HOWTO Xorg and Fonts
December 2009
S M T W T F S
November 2009January 2010
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31