嵌入式Linux应用开发——Framebuffer、字符、freetype(所学课程来源百问网)

目录

一、Framebuffer应用编程

二、字符

2.1字符的编码方式

​编辑

2.2点阵显示ASCII字符

2.3点阵显示中文字符

三、freetype

3.1安装freetype

3.2freetype中重要的数据结构

3.3freetype显示单个字符

3.4freetype显示一行文字


一、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开发板》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值