树莓派显示器截图方法大全(适用于Linux-C,可扩展开发)
文章目录
1. 前言
有这么个需求,我们对树莓派做了特殊处理,让其可以配合大屏播放视频和图片等,为了检测播放是否正常,我们会定时抓取屏幕截图进行AI检测判断播放是否正常,在搜索树莓派截图后基本清一色都是安装scrot,但是我在安装使用scrot后发现截图结果是黑屏,最终一番google发现了这个地址,有很多关于树莓派截图的方式方法,这里记录并传播一下
https://ricelee.com/3799/snapshot-on-raspberry-pi/
其中一些方法对于定制树莓派、没有安装desktop的树莓派都有效,期间读取/dev/fb0发现只有开机时的画面,说明部分定制设备没有通过该缓存进行界面处理(树莓派可使用python开发,结合python生态可以做的事情比较多)。
2. shutter
如果是在X Window下,最简单的方式是安装shutter,但这有两个缺点,就是shutter相依的套件太多,所以光是截图这个小功能就需要安装将近90MB的套件,并且执行起来很慢,但使用最容易。
步骤如下:
1.先安装必要套件
2.从主要功能选单(main-menu)叫起来
3.执行区域性的截图、或是全萤幕的截图等功能
3. scrot
如果觉的shutter不适合,还可以用scrot + openbox,之后就可以按PrtSc直接做snapshot。有关scrot的使用方式可以参考这篇。
步骤如下:
1.先安装必要套件
2.增加按键的系结(key binding),将keybind 的定义放在<keyboard> 和</keyboard> 之间
3.进到桌面环境下,按PrtSc 做snapshot,撷取画面的预设路径是放在家目录(/home/pi) 下。
4. raspi2png
如果是在console底下可以透过cat /dev/fb0 > snapshot.raw
将framebuffer的资料转存为RGB565的raw档。但如果要用Eye等看图软体读取,就需要将raw档透过FFmpeg等软体先转为PNG或是BMP等格式(ssh远程登录可以使用)。
幸运的是,我们也可以透过vc_dispmanx_snapshot这个函式取得目前萤幕的状态。
Andrew Duncan已经写成成执行档,下载后编译就可以在console底下随时撷取萤幕画面。
步骤如下:
1.先安装必要套件
2.下载原始码
3.编译
4.使用,不加任何参数时预设是存成png 格式的档案
可用的参数有以下几种,当然这指令也可以在X Window下执行。
分别是:
–pngname或者-p: 指定生成的图片的名称,默认是snapshot.png;
–height或者-h: 图片height,默认是显示屏的height;
–width或者-w: 图片width,默认是显示屏的width;
–compression或者-c: 图片PNG压缩等级,0-9
–delay或者-d: 延迟截图秒数,默认是0秒
–display或者-D: 显示屏编号,多个屏时可指定显示屏编号,默认为0
–stdout或者-s: 可以将输出直接打印到终端
–help或者-H: 显示帮助
5. fb2png
最后,我们最喜欢用的其实是同一个作者的fb2png。这程式可以读取framebuffer并直接储存成png格式的档案。
步骤如下:
1.先安装必要套件
2.下载原始码
3.编译
4.使用
6. 最后
最后比较一下raspi2png和fb2png,底下是相同时间的撷取结果,可以发现raspi2png是根据VideoCore API的vc_dispmanx_display_get_info传回萤幕解析度,因此虽我们已经将framebuffer的解析度调整成800×600,但是因为我们用的萤幕解析度是1280×800,因此最后还是抓下1280×800的截图。
而fb2png 则是开启/dev/fb0 的装置档,并根据fb_var_screeninfo 回传framebuffer 的xres 和yres,因此最后截图结果会是800×600 的解析度,比较符合我们想要的结果。
我们在使用时更多是为了检测布局情况和图片的契合情况,所以以屏幕分辨率截图更符合我们的预期,所以到底使用raspi2png还是fb2png需要根据需求自行选择。
必要时我们可以直接修改对应截图软件源码提供将其编译为so或者SDK提供接口做更多的扩展,最后两个软件对开发Linux-C的截图软件有很好的帮助。