树莓派显示器截图方法大全(适用于Linux-C,可扩展开发)
  FUPjNpIMLXS6 2023年11月12日 20 0


树莓派显示器截图方法大全(适用于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.先安装必要套件

pi@raspberrypi:~$ sudo apt-get install

2.从主要功能选单(main-menu)叫起来

树莓派显示器截图方法大全(适用于Linux-C,可扩展开发)_linux

3.执行区域性的截图、或是全萤幕的截图等功能

树莓派显示器截图方法大全(适用于Linux-C,可扩展开发)_git_02

3. scrot

如果觉的shutter不适合,还可以用​​scrot​​​ + ​​openbox​​​,之后就可以按PrtSc直接做snapshot。有关scrot的使用方式可以参考​​这篇​​。

步骤如下:
1.先安装必要套件

pi@raspberrypi:~$ sudo apt-get install

2.增加按键的系结(key binding),将keybind 的定义放在<keyboard> 和</keyboard> 之间

pi@raspberrypi:~$ vi
<keybind key="Print">
<action name="Execute">
<command>scrot</command>
</action>
</keybind>

3.进到桌面环境下,按PrtSc 做snapshot,撷取画面的预设路径是放在家目录(/home/pi) 下。

树莓派显示器截图方法大全(适用于Linux-C,可扩展开发)_linux_03

4. raspi2png

如果是在console底下可以透过​​cat /dev/fb0 > snapshot.raw​​​将​​framebuffer​​​的资料转存为RGB565的raw档。但如果要用​​Eye​​​等看图软体读取,就需要将raw档透过​​FFmpeg​​等软体先转为PNG或是BMP等格式(ssh远程登录可以使用)。

幸运的是,我们也可以透过​​vc_dispmanx_snapshot​​​这个函式取得目前萤幕的状态。
​​​Andrew Duncan​​​已经写成成执行档,​​下载​​后编译就可以在console底下随时撷取萤幕画面。

步骤如下:
1.先安装必要套件

pi@raspberrypi:~$ sudo apt-get install

2.下载原始码

pi@raspberrypi:~$ git

3.编译

pi@raspberrypi:~$ cd raspi2png
pi@raspberrypi:~$ make

4.使用,不加任何参数时预设是存成png 格式的档案

pi@raspberrypi:~$ ./raspi2png

可用的参数有以下几种,当然这指令也可以在X Window下执行。

pi@raspberrypi:~/raspi2png-master $ raspi2png --help
Usage: raspi2png [--pngname name] [--width <width>] [--height <height>] [--compression <level>] [--delay <delay>] [--display <number>] [--stdout] [--help]

--pngname,-p - name of png file to create (default is snapshot.png)
--height,-h - image height (default is screen height)
--width,-w - image width (default is screen width)
--compression,-c - PNG compression level (0 - 9)
--delay,-d - delay in seconds (default 0)
--display,-D - Raspberry Pi display number (default 0)
--stdout,-s - write file

分别是:
–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.先安装必要套件

pi@raspberrypi:~$ sudo apt-get install

2.下载原始码

pi@raspberrypi:~$ git

3.编译

pi@raspberrypi:~$ cd fb2png
pi@raspberrypi:~$ make

4.使用

pi@raspberrypi:~$ ./fb2png

6. 最后

最后比较一下raspi2png和fb2png,底下是相同时间的撷取结果,可以发现raspi2png是根据​​VideoCore API​​的vc_dispmanx_display_get_info传回萤幕解析度,因此虽我们已经将framebuffer的解析度调整成800×600,但是因为我们用的萤幕解析度是1280×800,因此最后还是抓下1280×800的截图。

树莓派显示器截图方法大全(适用于Linux-C,可扩展开发)_git_04

而fb2png 则是开启/dev/fb0 的装置档,并根据fb_var_screeninfo 回传framebuffer 的xres 和yres,因此最后截图结果会是800×600 的解析度,比较符合我们想要的结果。

树莓派显示器截图方法大全(适用于Linux-C,可扩展开发)_截图_05

我们在使用时更多是为了检测布局情况和图片的契合情况,所以以屏幕分辨率截图更符合我们的预期,所以到底使用raspi2png还是fb2png需要根据需求自行选择。

必要时我们可以直接修改对应截图软件源码提供将其编译为so或者SDK提供接口做更多的扩展,最后两个软件对开发Linux-C的截图软件有很好的帮助。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  ehrZuhofWJiC   2024年04月26日   34   0   0 内核linux
  ehrZuhofWJiC   2024年05月17日   34   0   0 linuxsvn
  ehrZuhofWJiC   2024年05月17日   37   0   0 KVMlinux
  ehrZuhofWJiC   2024年05月17日   33   0   0 服务器linux
FUPjNpIMLXS6