我如何在Qt/C中读取当前帧缓冲区上的图像

How do I read the image currently on the framebuffer in Qt/C?

本文关键字:缓冲区 图像 读取 Qt      更新时间:2023-10-16

是否有任何方法可以在Qt或C中读取framebuffer的内容?我读到可以将/dev/fb0的内容写入文件,然后加载它。但是否有可能避免将其保存到内存中,并简单地复制到新的内存位置在Qt中使用?谢谢!

普通的Qt发行版不太可能有在Linux上读取framebuffer的特殊支持。它在X11之上分层,并试图提供跨平台功能(例如,像/dev/fb0这样的东西在Windows上没有意义)。所以你会使用更高层次的抽象,比如@BerkDemirkir指出的QPixmap::grabWindow()…在framebuffer之前可能会有很多层之间的跳转。

(注意:如果你正在编写一个普通的跨平台Qt应用程序,打算在窗口环境中运行,这当然是你想要的一个简单的屏幕捕获任务的路线!!)

另一方面,Qt/Embedded是为Linux设计的,并与QWS而不是X11一起工作。他们的想法是,没有窗口系统,你的应用拥有整个屏幕。它通过一个QScreen对象直接写入帧缓冲区,该对象有一个base()方法,实际上可以给你一个指向底层内存的指针:

http://doc.qt.nokia.com/4.7-snapshot/qscreen.html基地

这些可能是做这些事情的唯一"Qt"方法。如果您想要一个API而不是直接通过/dev/fb0,您可以研究EZFB之类的东西。(我没有深入挖掘,知道它是否有用,只是发现它与查询类似"linux framebuffer API")

http://freshmeat.net/projects/ezfb/

您可以查看这个示例从任何窗口(甚至桌面)截取屏幕截图。示例使用QScreen::grabWindow()函数截图