目录
一、Framebuffer应用编程
Framebuffer是用来控制LCD屏幕的。
首地址加上偏移地址可以计算出,你想要修改的像素点在Framebuffer中的地址
假设需要设置LCD中坐标(x,y)处像素的颜色,首先要找到这个像素对应的内存,然后根据它的BPP值设置颜色。
调用描点函数是基础,通过描点函数就可以实现写字、绘图等功能。
void lcd_put_pixel(int x, int y, unsigned int color)
对LCD进行操作的流程
首先,使用open函数打开驱动程序
然后,通过ioctl函数获得LCD屏幕的参数
再使用mmap去映射到Framebuffer
最后实现描点函数
二、字符
2.1字符的编码方式
字符的三种编码方式:ASCII、ANSI、UNICODE
ACSII:能表示的字符有限
ANSI:相同的值,在不同字符集下,对应的文字不同
UNICODE:每一个字符都对应一个数值,使用UTF-16和UTF-8来分隔数值,对于UTF16有大字节序和小字节序,对于UTF-8可以带头部和不带头部
2.2点阵显示ASCII字符
对于指定颜色,先是在执行程序时,要先判断是否带有颜色参数,用一个变量记录指定的颜色,因为颜色时在描点函数里给定的,我们可以将获取到的颜色参数传入描点函数中,这样就可以达到指定字符颜色的效果。
2.3点阵显示中文字符
重点是要知道怎么从HZK16中找到我们要i显示汉字的位置,难点时如何确定每一位像素
如果执行程序后在LCD上显示乱码,那就要将可执行文件指定为GB2312编码类型
-fexec-charset=GB2312
三、freetype
如何解决交叉编译找不到库的问题
3.1安装freetype
参考完全开发手册6.4
3.2freetype中重要的数据结构
FT_Library:首先要进行初始化库,将初始化结果放到library里
FT_Face:用来打开字体文件,字体文件最终会存放在face
FT_Glyph:从slot里获取新的关键信息
FT_BBox:表示一个字符的外框
3.3freetype显示单个字符
通过矢量字体来显示
3.4freetype显示一行文字
步骤总结:
1.由于freetype使用的时笛卡尔坐标系,在显示时我们需要将它转换成LCD坐标系
2.计算外框。先设置原点,再获取,外框要从glyph中获得,而获得glyph,我们要先使用FT_Load_Char函数取得每个文字的face,再使用FT_Get_Glyph从face中获取glyph,最后我们就可以从glyph中获得外框信息。对外框进行更新,再从slot中取出每个字符的advance与原点相加。
3.反推出原点的位置
4.处理字符
我们对字符的处理流程都是相通的。核心步骤就是:
然后从glyph中取得我们所需要的信息进行处理。
————所学课程为百问网韦老师的《手把手教你嵌入式Linux快速入门到精通 | Linux应用驱动开发基于I.MX6ULL/STM32MP157/T113/D1H开发板》