在桌面级操作系统中,下载一个截图软件就能实现截屏操作,但在嵌入式 Linux 系统中,要实现小小的截图功能却没有那么简单。本文为您介绍嵌入式 Linux 系统中实现截屏功能的方法和步骤。
1 . 原理
由于 Linux 系统的 FrameBuffer 机制,会把屏幕上的每个点映射成一段线性内存空间,程序就可以通过改变这段内存的值来改变屏幕上某一点的颜色。屏幕色彩的原始数据保存在 /dev/fb0 文件内,因此我们可以直接 cat /dev/fb0 > fb.raw 读取该文件获得数据。
图 1 原始截屏数据
显然,这种原始数据无法通过简单的工具直接查看,特别是在精简的嵌入式 Linux 系统上。因此,我们找到了一个不错的工具——gsnap。这个工具可以将 framebuffer 中的数据直接保存为 png 或者 jpeg 格式的图片。当然,我们需要获得该工具的源码,并且在交叉编译后移植它。
2 . 原材料
本次尝试笔者选择周立功 / 致远电子开源开发套件 EasyARM-i.MX283A3,宿主机选用 Ubuntu14.04。首先,我们需要获取 gsnap 源码,该源码可在网络中搜索下载。源码解压后得到的文件如图 2: