监控系统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 #测试通断

相关推荐
从零开始的代码生活_31 分钟前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸35 分钟前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
GIS阵地1 小时前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis
王维同学1 小时前
[原创][Windows C++]LSA 认证、安全与通知包的注册表枚举
c++·windows·安全
_wyt0013 小时前
完全背包问题详解
c++·背包dp
皓月斯语4 小时前
B3842 [GESP202306 三级] 春游 题解
数据结构·c++·算法·题解
CedarQR5 小时前
万字长文:从零在 RK3588 上部署 PaddleSpeech 中文 TTS 全流程(FastSpeech2 + HiFiGAN)
开发语言·c++·嵌入式硬件·ubuntu·json
萌动的小火苗5 小时前
嵌入式开发中的栈与队列:任务调度为什么依赖数据结构
数据结构·c++·单片机·嵌入式硬件
星恒随风6 小时前
C++ STL 栈详解:stack 的使用、经典题目与简单模拟实现
开发语言·数据结构·c++·笔记·学习
txzrxz6 小时前
单调队列讲解
数据结构·c++·算法·单调队列