` 本帖最后由 renshengrumeng 于 2020-11-2 11:08 编辑
一、简介
显示非矢量汉字可以使用单片机开发所采用的方法直接描点。使用矢量显示汉字,可以动态调整字体大小。通过Freetype 一个完全免费开源的字体引擎库可以实现矢量汉字。显示汉字还得需要字库Windows使用的字体文件在c:WindowsFonts目录下,扩展名为TTF的都是矢量字库,TTC是几个TTF合成的字库,本次实验采用simsum.ttc 这里引入个类型,wchar_t是C/C++的字符类型,是一种扩展的存储方式。wchar_t类型主要用在国际化程序的实现中,但它不等同于unicode编码。unicode编码的字符一般以wchar_t类型存储,它实际定义typedef unsigned short wchar_t;为了让编译器识别Unicode字符串,必须以在前面加一个“L”。 freetype开源库 api 接口说明:https://freetype.org/freetype2/docs/reference/ft2-outline_processing.html
更多详细信息可以参考韦东山老师的,嵌入式Linux应用开发完全手册_韦东山全系列视频文档全集V2.8.pdf 二、课后题感受 本人算小白吧,之前没弄个这快,根据完全手册和提供的源码进行了一步步学习,看了源码感觉显示很简单汉字什么的挺简单,准备做下课后题。在做课后题的过程中发现,老师,只是将我们带入门内,以后的修行还得靠自己深入研究。 首先说说freetype 的斜体显示 在网上搜发现资料不是完整,找到一个进行了验证,实现方式如下“ 斜体在FreeType中可以通过矩阵变换来实现,只要把矩阵设置成一个切边矩阵就可以了,方法如下: file:///C:/Users/jinsh/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif// 倾斜度,越大就越斜
file:///C:/Users/jinsh/AppData/Local/Temp/msohtmlclip1/01/clip_image001.giffloat lean = 0.5f;
file:///C:/Users/jinsh/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gifFT_Matrix matrix;
file:///C:/Users/jinsh/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gifmatrix.xx = 0x10000L;
file:///C:/Users/jinsh/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gifmatrix.xy = lean * 0x10000L;
file:///C:/Users/jinsh/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gifmatrix.yx = 0;
file:///C:/Users/jinsh/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gifmatrix.yy = 0x10000L;
file:///C:/Users/jinsh/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gifFT_Set_Transform( face, &matrix, 0 ); 这样写是可以实现一个字的斜体而且角度自己控制,但是当显示多个字体的时候会出现,字体部分被后一个字体覆盖。所以这样实现是有问题的。想到问题的解决方式是根据斜率计算字体长度,在计算下一个字的pen时再往后移动一定距离,可以解决这个问题,但是不知道,这个是不是一个正确的方式。 换行显示 需要知道一行字体需要多高,还有就是最后一个字体的处理,不要再最后显示一半,这些都是具体显示效果的细节,可通过计算测试做到完美。 这里展示两种测试失败的效果,问题时行高设置有问题和最后一个字被盖住一半,这两个是显示时需要避免的问题。另外一个张是打印的坐标信息
三、源码 最后还是附上我的源码,虽然没有优化好。
`
|