当前位置: 首页 > news >正文

飞凌嵌入式ElfBoard-LCD显示图片(bmp)编程示例之基础概念介绍

介绍framebuffer

Framebuffer 字面意思就是帧缓存的意思,即显存,里面保存着一帧图像。事实上,对于嵌入式系统而言。没有真正意义上的显存,Framebuffer 是通过内存模拟出来的。

1.LCD FrameBuffer里的若干字节表示(具体根据驱动适配),LCD屏幕上的一个像素点。

1)RGB888:32bpp,占4字节,分别是A8、R8、G8、B8,一般只用其中低24位,高8位表示透明度。

2)RGB565:16bpp,占2字节,分别是R5、G6、B5,比较常用的一种颜色

3)RGB555:很少用。

假设LCD屏幕分辨率是800x600,每个像素占4字节,那么framebuffer 大小就是:

800x600x4=1920000字节

2.fb与应用程序的互交

对于应用程序而言,它和其它的设备并没有什么区别,用户可以把fb看成是一块内存,既可以向内存中写数据,也可以读数据。fb的显示缓冲区位于内核空间。应用程序可以把此空间映射到自己的用户空间,再进行操作。

3.在应用程序中,操作/dev/fbn的一般步骤

1)打开/dev/fbn设备文件。

2)用ioctl操作取得当前显示屏幕的参数,如屏幕的分辨率、每个像素点的比特数。根据屏幕的参数可计算屏幕缓冲区的大小。

3)用mmap函数,将屏幕缓冲区映射到用户空间。

4)映射后就可以直接读/写屏幕缓冲区,进行绘图和图片显示。

介绍mmap

mmap概念

存储映射 I/O这种高级 I/O方式,它的一个非常经典的使用场景便是用在 Framebuffer 应用编程中。通过 mmap()将显示器的显示缓冲区(显存)映射到进程的地址空间中,这样应用程序便可直接对显示缓冲区进行读写操作。

为什么这里需要使用存储映射 I/O 这种方式呢?其实使用普通的 I/O 方式(譬如直接 read、write)也是可以的,只是,当数据量比较大时,普通 I/O 方式效率较低。假设某一显示器的分辨率为 1920 * 1080,像素格式为ARGB8888,针对该显示器,刷一帧图像的数据量为 1920 x 1080 x 32 / 8 = 8294400 个字节(约等于 8MB),这还只是一帧的图像数据,而对于显示器来说,显示的图像往往是动态改变的,意味着图像数据会被不断更新。

在这种情况下,数据量是比较庞大的,使用普通 I/O 方式必然导致效率低下,所以才会采用存储映射I/O 方式。

用法

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);

下面介绍一下 mmap 函数的各个参数作用:

addr:指定映射的虚拟内存地址,可以设置为 NULL,让 Linux 内核自动选择合适的虚拟内存地址。

length:映射的长度;

prot:映射内存的保护模式,可选值如下:

PROT_EXEC:可以被执行;

PROT_READ:可以被读取;

PROT_WRITE:可以被写入;

PROT_NONE:不可访问;

flags:指定映射的类型,常用的可选值如下:

MAP_FIXED:使用指定的起始虚拟内存地址进行映射;

MAP_SHARED:与其它所有映射到这个文件的进程共享映射空间(可实现共享内存);

MAP_PRIVATE:建立一个写时复制(Copy on Write)的私有映射空间;

MAP_LOCKED:锁定映射区的页面,从而防止页面被交换出内存;

fd:进行映射的文件句柄;

offset:文件偏移量(从文件的何处开始映射);

http://www.jsqmd.com/news/1303277/

相关文章:

  • 维策信息|家装整装装修行业GEO优化复盘解析(2026行业S级附真实落地案例) - 甄选测评馆
  • Claude API订阅方案解析:Max 5x为何是性价比首选
  • 如何用tochd轻松转换游戏镜像:释放硬盘空间的终极指南
  • GNU C语言内存管理:动态分配与释放的终极指南
  • 8月研究计划与方向展望:从热点追踪到深耕领域的选择策略
  • 终极指南:如何快速解密RPG Maker MV/MZ加密资源文件
  • 分布式系统工程师的能力模型:从共识协议到性能调优的知识图谱与学习路径
  • 流量破局与多重获利:短视频直播商城系统重塑私域变现新玩法 - 壹软科技
  • 抖音视频怎么提取音频?2026大马工具箱+快快无印一键提取 - 科技大爆炸
  • 2027国际消费电子展预定AI算力专区
  • cpdf-binaries常见问题解决手册:从权限错误到格式兼容的10个坑
  • AI视频模板定价黑幕:为什么同样1分钟模板,有人卖9.9元,有人卖299美元?揭秘头部卖家不愿公开的3层价值锚定模型
  • 如何评估AI外文论文工具的实际效果 - 逢君学术-AI论文写作
  • 如何在5分钟内用QRemeshify一键生成高质量四边形拓扑网格
  • 机器学习项目的技术选型方法论:从问题定义到方案决策的完整框架
  • 【Bug已解决】[Bug] Implicit padding when splitting input between processes while padding flag is disabl
  • 2026年安抚类幼儿玩具怎么选:基于安全性与安抚体验的选购指南 - 科技焦点
  • 音频提取工具哪个好用?2026大马工具箱+快快无印深度对比 - 科技大爆炸
  • Ollama 生态 7 月全景回顾:版本更新、社区插件与生产化最佳实践汇总
  • 2026 年 7 月新发布:平阳口碑好的无机纤维喷涂加工厂哪家权威,把老旧厂房变恒温仓库,居然全靠这不起眼的材料?-祥实无机纤维喷涂 - 企业推荐管【认证】
  • 小语种人工翻译评测与平台选择指南 - 逢君学术-AI论文写作
  • 评价高的亚洲EMBA择校指南,民营企业家怎么选更适配
  • 从手动配置到一键安装:BetterNCM安装器的完整进化指南
  • 小朋友房訂造傢俬如何比較?安全、成長與收納要同時成立 - 行业百科测评
  • OKBIYE高阶功能榜单[特殊字符]90%毕业生都不知道的论文王牌技能
  • Firefly 边界治理
  • kage:用无头浏览器“渲染后封印“网站,彻底告别 JS 幽灵依赖
  • 2026福布斯怎么上榜?个人与企业申报条件、材料流程及辅导机构前十名 - 环球新视野
  • AI开题报告工具实用测评参考 - 逢君学术-AI论文写作
  • 2026 年现阶段西宁可靠的检查井模具供应商哪家好,打破行业潜规则:这套工具如何让你成本骤降50%?-永正模具 - 行业推荐官[官方】--