截取嵌入式 Linux 帧缓冲区的屏幕截图
Posted
技术标签:
【中文标题】截取嵌入式 Linux 帧缓冲区的屏幕截图【英文标题】:Taking a Screen Shot of an Embedded Linux Framebuffer 【发布时间】:2009-10-29 17:03:47 【问题描述】:我在评估套件(Zoom OMAP35x Torpedo Development Kit)上运行嵌入式 Linux。该板有一个 LCD,我希望能够将屏幕截图转换为 gif 或 png。我可以通过执行以下操作获取原始数据:“cp /dev/fb0 screen.raw”,但我对如何将图像转换为 gif 或 png 格式感到困惑。
我玩过 ImageMagick 的转换(例如:“convert -depth 8 -size 240x320 rgb:./screen.raw -swap 0,2 -separate -combine screen.png”),但一直无法获得看起来正确的图像。
有谁知道我可以尝试的其他工具吗?或者有人有使用 ImageMagick 的提示吗?
【问题讨论】:
“嵌入式 Linux”是一个非常具体的内核版本/配置,还是只是在嵌入式上运行的 Linux 的通用名称?相关:unix.stackexchange.com/questions/25063/… 【参考方案1】:看看fbgrab,一个可以做到这一点的应用程序(它将帧缓冲区内容保存为png)。
【讨论】:
我试用了 fbgrab,但它不支持“低端位深度”。对于我的设备,位深度为 8。:( 但是,我查看了 fbshot - sfires.net/fbshot。fbgrab 基于 fbshot,它支持 8 位深度。fbshot 工作得很好。 fbgrab 已移至GitHub。我也有一个问题,旧版本 1.2 不能很好地处理 RGB565 - 通过更新到最新版本来修复。【参考方案2】:您可以简单地将帧缓冲区捕获到文件中并在任何原始图像查看器中打开它或在线尝试,例如:https://rawpixels.net/
cat /dev/fb0 > fbdump
【讨论】:
这个在线转换器对我不起作用,但在这里我找到了一个可以很好地完成转换的 Perl 脚本:cnx-software.com/2010/07/18/how-to-do-a-framebuffer-screenshot 通过这种转储 /dev/fb0 的方式获得几兆字节的全零内容是否正常?【参考方案3】:直接使用 ImageMagick 可能不太可能/不容易。
Linux 内核 4.2 文档 https://github.com/torvalds/linux/blob/v4.2/Documentation/fb/api.txt#45 说:
像素以硬件相关格式存储在内存中。应用需要 要知道像素存储格式,以便将图像数据写入 硬件预期格式的帧缓冲存储器。
格式由帧缓冲区类型和视觉效果描述。一些视觉效果需要 附加信息,存储在可变屏幕信息中 bits_per_pixel、灰度、红色、绿色、蓝色和 transp 字段。
视觉效果描述了颜色信息如何被编码和组合以创建 宏像素。类型描述了宏像素如何存储在内存中。支持以下类型和视觉效果。
以下是视觉效果和类型的列表,但描述不足以让我立即理解确切的格式。
但它似乎可能不是 ImageMagick 可以直接理解的格式,或者至少您必须找出使用的格式来决定 ImageMagick 选项。
【讨论】:
以上是关于截取嵌入式 Linux 帧缓冲区的屏幕截图的主要内容,如果未能解决你的问题,请参考以下文章