我如何在Qt/C中读取当前帧缓冲区上的图像
How do I read the image currently on the framebuffer in Qt/C?
是否有任何方法可以在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()
方法,实际上可以给你一个指向底层内存的指针:
这些可能是做这些事情的唯一"Qt"方法。如果您想要一个API而不是直接通过/dev/fb0
,您可以研究EZFB之类的东西。(我没有深入挖掘,知道它是否有用,只是发现它与查询类似"linux framebuffer API")
您可以查看这个示例从任何窗口(甚至桌面)截取屏幕截图。示例使用QScreen::grabWindow()
函数截图
相关文章:
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 将图像魔术 blob 保存到节点缓冲区
- 优化图像缓冲区
- 有没有办法将两个输入图像堆叠到卤化物发生器中的单个 4 维缓冲区中?
- 使用 GTK 将 EGL 图像渲染到帧缓冲区
- 用于视频处理的图像缓冲区
- 如何将图像缓冲区传递到OpenCV垫子对象
- QT 无法从缓冲区加载图像
- 尝试为图像缓冲区分配内存时 ptr 值错误
- 将图像缓冲区保存到Android上的文件
- 在 Python 中使用 OpenCV 将打包的 BGRA 图像缓冲区转换为 RGB 时遇到问题
- 在amd64体系结构上的C++中,将图像缓冲区blit到另一个缓冲区的xy偏移中的最快方法
- 在不使用缓冲区的情况下对2个图像进行操作(加法、减法等)
- 如何使用LEADTOOLS 19将图像效果应用于内存缓冲区中的JPEG
- GetDIBits 将图像缓冲区设置为所有 0(全黑)
- Vulkan:在多个命令缓冲区中排列图像内存屏障
- 使用图像对象时,它比使用缓冲区对象慢
- 如何将屏幕图像放入内存缓冲区
- turbojpeg-cpp中的realloc图像缓冲区
- 压缩原始图像缓冲区