TrueType Font ,由Apple和微软公司合作推出的文字文件格式,一个TTF字符由大量多边形组成,每一个多边形由一个名叫TTPOLYGONHEADER的数据结构开始,跟在TTPOLYGONHEADER后面的是一系列的TTPOLYCURVE数据结构体。多边形的顶点是POINTFX类型的数据结构点。
字体是如何保证对齐的呢?原来在字库内部,有一个基准线,就好像信纸的虚线,用来水平方向对齐的,同样,也有个垂直方向的基准线。每个字都有上浮和下沉的高度,这也是该字的最上和最下的点所处的位置。
矢量字在不同字号下,根据点阵尺寸,显示的精细程度也不一样。我们这里将“8”放大了看,在小字号和大字号下的效果。
在不同的字号下,根据最简单的缩放原理,将所有的点缩放到合适的位置,再确定曲线。这时候,一条边就占据不了整列像素,或者一条边压在了两列像素的中间,这样就造成了灰色的线条。而这并不是我们想要的效果,Photoshop通过USM锐化滤镜,将虚边得以逐步清晰,以达到所要的矢量字。
苹果系统通过调整整体点阵的位置,将所有的点适当偏移半个像素以内的位置,可以实现较为清晰的字体。如果在关闭了消除锯齿方式,则有些边线由于占据不了半个像素,而不能够显示,这就形成了所谓的缺边或者缺笔划。
有些软件,比如AdobeAcrobat,通过一种较为复杂算法,以实现矢量字的清晰。将某些关联的点作为一个segment,并且局部偏移到邻近的整数位,而其他部分不动。这种方法目前较为流行,可以实现比苹果和ps还要清晰的矢量效果。
为什么我们通常看到的齿条文字这么清晰呢
微软的TTF为了保证小字号下的清晰,可谓是用尽了方法。首先,在庞大的字库,内置了数个字号的点阵字,接着才是矢量字。比如宋体,内置了12、14、16、18等几个点阵字库,在这些之外才使用矢量字库来渲染。这也是为什么一个TTF文件要几兆甚至几十兆的容量,不过内嵌的点阵字越多,在不同字号下实现的效果自然越好。别小看了这些点阵字,每一个都是平面设计师在工具上画的,并非由软件生成。唉,可怜的设计师啊~~~~~~
(ps:android自带字库最大就5M,是矢量字库)。
不过,有个特例。比如Arial字体,内部全是矢量字,但各种尺寸下都是这么清晰。为什么呢?
原来,微软在字库中加入了解释程序,interpreter,一种专门用于字库渲染的脚本命令。在不同的字号下,都有相应的语句,将矢量字得以最清晰化。这是一种更复杂的技术,微软也觉得不能广泛使用,所以只有在部分的英文字库中才有,而且该脚本对应每个字都有一段代码,容量非常大,用在汉字上几乎是不可能,除非是整个文字不多于100个才能使用。
interpreter就是这么神奇,他也是目前最好的技术之一,能够将矢量字渲染的和点阵字一样的清晰。他将某些边线的距离拉开,而将另一部分收缩,总之是按照人的想法来做的,这也是编好的程序。
在1998年的时候,微软声称发明了一种新的技术,能在LCD上将矢量字体的清晰度提高到300%。而后,出现了名为Microsoft Reader的软件。Adobe也不甘示弱,随即在Acrobat 4中对CoolType进行了支持,而Linux的FreeType库也开始支持次像素平滑。从实际效果来看,Acrobat做的最好,最灵活,而微软的缺少适当的调节工具,Linux的次像素平滑简直就是垃圾,照虎画猫。(ps:所以ubuntu的中文会显示的那么别扭,android基于linux但Google进行了优化,文字显示效果得到质的提升)。
ClearType使用彩色来描边,显示对比度越是强的文字,比如白底黑字或者黑底白字,都是最清晰的。其实,理论上ClearType能够将显示精度提到到300%,但实际上只能达到200%左右。
一般来说,液晶显示器的点阵分布都非常均匀,每个点都是由红绿蓝3色排列而成。我们通常要显示一个白色,需要将红绿蓝都点亮,而黑色是都不显示。ClearType将点的概念再次扩展,把邻近的两个点3色混淆,借前一个点的颜色而忽略后一点的某种颜色。这样,就可以把传统的一个点的最小单位扩展到1/3个点的单位。
在使用ClearType技术后,原来的字体渲染将更加清晰,当然,只限于LCD显示器,CRT会更加模糊。ClearType还有一个关键的技术,就是Linux的次像素平滑没有学去的地方,一定要考虑到红绿蓝的颜色亮度平衡。一般来说,绿色的亮度最高,而蓝色的最低,所以我们要在显示绿色的时候加点红色和蓝色来调低亮度,而显示蓝色的时候要加入绿色和红色来增加亮度。这种做法也可以使边界的彩边不是那么明显,看起来更像是黑色的字。不过,这种做法使得原本可以提高显示精细程度到300%的技术,降低了许多,不过还是要高于200%。
1.字体显示不是越大越清晰,当字体像素与设备物理像素是点对点(或者1比N,N为整数时最清晰)。
2.在一些图形处理软件中比如Photoshop,文字都会经过算法优化,视觉上会比手机上更清晰,耐看一点。这个差异性是客观存在的。
3.手机和电脑屏幕的物理像素大小和发光排列原理都不尽相同,所以呈现的细节特点,色彩的表现力和冲击力都不一样,最终效果还是要以特定设备为准。
延伸篇:
为了提升文字显示效果的视觉感染力。人们设计了各种字体,并加入无数的艺术效果。在android系统中TextView组件封装了文字的显示和操作。虽然不能像专业软件那样对文字进行所有操作,但只要我们合理的使用里面的阴影效果api,也能大大提升文字在手机中显示效果,以下我会用一个demo简单说明不同的阴影带来完全两样的显示效果。权当是抛砖引玉了。
可以看到加了一个像素的投影后文字显得很清晰,也更有质感。
凹感:
凸感:
win7桌面图标和android4.0桌面图标都加了Y轴2个像素的投影增加图标的感染力和视觉舒适度,也一定程度上让屏幕看起来更清晰透彻。
结论:1.合理使用阴影能大大提升文字显示的效果
2.文字阴影软件实现,图标投影请UI设计时直接在资源文件上画好。
其实android实现文字阴影很简单,比如我们要实现以下文本效果:
a.我们可以在布局XML文件里面对TextView组件直接用属性标签定义:
android:shadowColor="#B0000000"
android:shadowRadius="3.0"
android:shadowDx="3.0"
android:shadowDy="3.0"
b.也可以在源代码里面调用TextView实例方法进行设置:
mTextView = (TextView)findViewById(R.id.serif4);
mTextView.setShadowLayer(3, 3.0f, 3.0f, Color.BLACK);
Attribute Name
|
Related Method
|
Description
|
android:shadowColor
|
setShadowLayer(float,float,float,int)
|
定义阴影的颜色.
|
android:shadowDx
|
setShadowLayer(float,float,float,int)
|
阴影在水平方向的位移.
|
android:shadowDy
|
setShadowLayer(float,float,float,int)
|
阴影在竖直方向的位移..
|
android:shadowRadius
|
setShadowLayer(float,float,float,int)
|
阴影的半径.
|
两者使用都很简单,可以根据实际情况选择一种去实现,也可以两种混合着用。一般视图型组件的在xml里面定义,功能型组件可在代码中实现会比较方便。
Tips:定义文字阴影的4个参数都需要UI设计稿中提供。数值不合理会让文字显示的更模糊难看,过犹不及请务必注意。
或许这个你也可以看一下》》Android
图片资源显示效果研究《《。
分享到:
相关推荐
Android SpannableString实现TextView不同大小文字居中显示。
Android 上的各种字体抖动效果,包括的比较全面,字体各种方式,提示用户
Android 文字翻页效果 Android 文字翻页效果Android 文字翻页效果
头像显示效果(头像散开动画效果),很炫的一个效果
在做下拉需要实现一个淡出的文字提示效果 在网上找了很久没找到自己做了一个很简单的 有兴趣的可以拿去看看
Android文字跑马灯效果,TextView的文字跑马灯效果
先来上个效果图: 当滑动时:数值显示,滑动停止时显示数字,使用FrameLayout结合SeekBar。 首先我们看看。 Layout: <?xml version=1.0 encoding=utf-8?> <merge xmlns:android=...
Android实现EditText的一个细节效果的源码
android 显示城市的一个很好的效果
android 仿《最美壁纸》iOS版文字逐个飞入效果 ,效果很不错。我也是从别的网上下的。
android pdf 的翻页效果,单击显示进度条,拖动进度条到指定页码,双击放大。花了蛮多时间搞出来的,希望对大家有帮助
Android 呼吸灯效果,就是Animation的淡入淡出循环播放
http://blog.csdn.net/xu_fu/article/details/24484019代码,实现类似shimmer的文字闪烁效果
Android 拖动 Button 显示效果,在Android测试机上是按住鼠标拖动按钮,和其它的拖动操作方法一样,不过在手机上运行的时候,用手触摸屏幕按钮住屏幕移动,就可移动按钮,代码注释英文,来自国外Android网站的源码。
一个卡片堆叠显示效果的Android自定义视图
Android 一个TextView中设置不同字体大小和颜色
左右对齐的文字效果,很常见,在大多数文章上都可以看到,这种效果能给人带来一种界面整洁的效果,但是如果只是左...而反观Android的官方控件TextView并没有提供这种左右对齐的显示效果,那么就只能自己来造轮子了。
安卓Android源码——拖动Button显示效果.zip
android 幻灯片效果,android 幻灯片效果