qiezi的学习园地

AS/C/C++/D/Java/JS/Python/Ruby

  C++博客 :: 首页 :: 新随笔 ::  ::  :: 管理 ::
最近在一个项目中要渲染段落文本,找了很多文字渲染库,发现都不能满足我的要求,所以只能自己做。字体渲染还是找freetype完成吧,虽然小字号效果不好,不过可以生成大图再缩小来解决掉,自己写一个字体渲染引擎也是不可望也不可及的事。

有了freetype实现底层字体渲染,我只需要处理一些布局方法即可,其中要实现的有以下几点:

1、英、中字体
很多中文字体中的英文字体都比较难看,所以在X的字体配置中设置了一个字体顺序。我也可以学学,传递一个字体列表,拿到一个字符时,按顺序从字体列表中查询,查询不到时就查下一个字体,这样就可以实现英、中使用不同字体了。

2、分行
段落分行要考虑到中、英文不同的分割方式,还有标点符号,某引起标点符号不能在行尾(比如“<等),某些标点不能在行首(比如”>),某些标点不能分割(比如破折号),所以实际上要有一个分割算法,把段落分成一个个的标记,汉字直接分割,英文按空格分割,不能在行首的标点就分到前面单词里,不能在行尾的就分在后面的单词里。

3、对齐
对齐方式有左、中、右、两端(Full Justification)这几种方式,目前大部分开源渲染库都不支持两端对齐,这也是我要自己实现的主要原因。左、中、右只要计算出一行的所有字符宽度,再计算出左边距即可。两端对齐则需要计算每个单词的间距。

4、段首缩进
原来设想在分段后直接加上全角空格,不想这个空格在转成UNICODE编码时,它的编码是\u0000,不能获取到全角空格的宽度。于是把它设成字体高度,看了一下效果还好。
posted on 2006-10-09 11:44 qiezi 阅读(667) 评论(0)  编辑 收藏 引用 所属分类: 自家破烂