监控系统2 - framebuffer
一、framebuffer
1. 概念
framebuffer是Linux系统中一种底层的图形接口,他直接在内存中开辟一块显示缓冲区,这块内存区域与屏幕像素一一对应,通过修改这块内存的数据控制屏幕显示内容
frame 帧缓存
FPS 帧率一秒钟刷新次数
2. 参数
1. 分辨率
屏幕的宽和高的像素点
例如:2500*1400,开发板:800*480(4.3英寸)
2. 色深
颜色空间,每个像素点用多少位数据来表示颜色
RGB888 / 24bit :24位色深,红绿蓝各占8位(1677w)
RGB565 / 16bit红绿蓝 :16位色深,红5位,绿6位,蓝5位(6.5w)
2. 特点
画面简单,不需要复杂交互,底层控制,并行传输,速率快
使用触屏、美观等高级控制需要LVGL图形库图形库
3. 接口
并行传输接口,数据传输速率快
屏幕使用RGB888接口:24根数据线同时传输,适合嵌入式系统中的实时显示
32位操作系统使用4字节操作,所以操作RGB时为ARGB,A:透明度
4. 操作步骤
1. / dev / fb0 open ,rw
2. ioctl,获得属性
3. mmap
4. 写入数据
5. close / uninit_fb
二、主要函数
1. main.c
1. 打开设备文件
2. 调用图形操作
3. 删除设备
2. utf.c
字库,解码汉字
3. framebuffer.c
1. init_fb
extern int init_fb(char *devname);
2. draw_point
extern void draw_point(int x,int y, unsigned int col);
绘制像素点
3. draw_clear
extern void draw_clear(unsigned int col);
清屏
4. draw_line
extern void draw_h_line(int x, int y, int len, unsigned int col);
绘制横线
extern void draw_s_line(int x, int y, int len, unsigned int col);
绘制竖线
extern void draw_x_line(int x1, int y1, int x2, int y2, unsigned int col);
绘制斜线
5. draw_rectangle
extern void draw_rectangle(int x, int y, int w, int h, unsigned int col);
6. draw_circle
extern void draw_circle(int x0, int y0, int r, unsigned int col);
7. draw_bmp
extern void draw_bmp(int x, int y, char *picname, int w, int h);
绘制bmp图片
bmp图片:前54位保存图片的属性信息,宽高色深,从第55位开始,以BGR顺序存放像素点信息
8. draw_word
extern void draw_word(int x, int y, unsigned char *word, int w, int h, unsigned int col);
取模:输入一个文字 => ctrl+enter => 取模方式 => C51格式
取模方式绘制汉字
9. draw_utf8_str
extern int draw_utf8_str(UTF8_INFO *info, int arg_x, int arg_y, char* zi, unsigned int col, unsigned int col1);
GB2312编码表两个字节表示一个汉字
utf-8标准三个字节表示一个汉字
获取字库:
编码选择:UNICODE
位置大小:配置位8的倍数
字库格式:DZK
备注宽高,用于编写
9. extern void uninit_fb(int fd);
三、补充
uboot命令
env default -a #恢复默认
saveenv #保存
setenv ipaddr 192.168.1.50 #设置板子的地址(uboot状态)
setenv ethaddr 00:04:9f:04:d2:35 #网卡硬件地址
setenv gatewayip 192.168.1.1 #网关地址
setenv netmask 255.255.255.0 #子网掩码
setenv serverip 192.168.1.100 #tftp server的地址,也就是虚拟机的ip地址
saveenv
ping 192.168.1.100 #测试通断