有没有什么办法可以读取Qt中的framebuffer或C中的内容?我读过可以将/ dev/fb0的内容写入文件,然后加载它。但有可能避免将其保存到内存中,并简单地复制到Qt中使用的新内存位置? 谢谢!如何读取Qt/C中framebuffer上的图像?
回答
普通的Qt发行版不太可能在Linux上读取framebuffer特别支持。它位于X11的顶层,并试图提供跨平台功能(例如,像/dev/fb0
在Windows上不会有意义)。所以你可以使用更高层次的抽象,比如@BerkDemirkir指出的QPixmap::grabWindow() ......可能在帧缓冲区之前通过层进行很多跳跃。
(注:如果你正在写意图在窗口环境中运行一个普通的跨平台的Qt应用程序,那肯定是你想要去一个简单的屏幕捕获任务!!路线)
在另一方面,Qt/Embedded是为Linux设计的,并且与QWS而不是X11一起使用。心态是,没有窗口系统,你的应用程序拥有整个屏幕。
http://doc.qt.nokia.com/4.7-snapshot/qscreen.html#base
这些都可能是唯一“的Qt”的方法来做到这些类型的:它直接通过QScreen
对象,其中有一个base()
方法,实际上可以给你一个指向底层内存写入到帧缓冲东西的。如果你想要一个API,而不是直接通过/dev/fb0
,你可能会调查类似EZFB的东西。 (我没有深挖不够了解,如果它有没有用,只是发现它与查询类似“Linux的帧缓冲API”)
只是为了澄清,我的问题只是为了获得帧缓冲的一个镜头。任何方式都适合我,都使用Qt或简单的C/C++。我采用的解决方案是使用QApplication :: desktopWidget()方法和建议的QPixmap :: grabWindow()。我不确切知道这些类是如何工作的,但它似乎正在做我所需要的。这是非常意想不到的,因为我使用OpenGL/EGL和QWS以及我自定义的QScreen实现写入屏幕。同样的方法在Qt/Embedded和QT/X11下都可以使用。无论如何,直接使用fb知道如何做这件事可能会很有趣。谢谢! –
从这里直觉上讲,我可能是错的,但是:如果你通过'grabWindow()',你不能确定你正在抓取显示给用户的帧缓冲设备。X服务器可能会根据其虚拟化显示来决定要提供什么内容。大部分时间只是帧缓冲。但是,举例来说:它可能会实现比物理显示大得多的虚拟屏幕。这也是所有的猜测,我的知识主要来自C-64或ModeX的古老发型。 :) – HostileFork
我对Qt/X11会发生什么感兴趣。这很有趣,同时考虑到OpenGL/EGL也被抓住了。 –
你可以看看this example从任何窗口(甚至桌面)截图。示例使用QScreen::grabWindow()
函数进行截图。
第一个链接已经死了 – Orient
已更新至Qt5和新的qt.io链接。 – blottedscience
- 1. 从framebuffer GLSL读取到OpenCV
- 2. 如何读取Java中的PGM图像?
- 3. 如何读取图像中的iphone
- 4. 如何读取图像中的数字?
- 5. Shader framebuffer回读
- 6. Android:如何在rooted设备上获取framebuffer(截图)?
- 7. OpenGL:从FrameBuffer中读取像素的四舍五入取整为255(0xFF)
- 8. 如何从图像中读取文字
- 9. 如何读取图像的块?
- 10. 读取图像
- 11. 如何用C++或python从图像中读取图像描述?
- 12. 如何发现Android上的framebuffer宽度?
- 13. 如何读取Silverlight图像控件中的像素值?
- 14. 如何读取和显示轴上的多个图像gui matlab
- 15. Raspberry上的Ruby framebuffer
- 16. 在Netbeans中读取图像
- 17. 如何从屏幕上读取像素?
- 18. 如何通过IDataReader读取图像
- 19. 如何使用libpng读取png图像?
- 20. 如何正确读取PGM图像C
- 21. 如何从PostAsync(HttpClient)读取图像?
- 22. 如何从xml文件读取图像?
- 23. Matlab - 如何从目录读取图像
- 24. 如何正确读取图像文件?
- 25. 如何使用Java API读取图像?
- 26. Spark如何有效读取100K图像?
- 27. Python - 如何从URL读取图像?
- 28. Qt读取许多图像优化 - 如何只读取大小?
- 29. 读取图像VB.net
- 30. 上传图像路径名读取“System.Web.HttpPostedFileWrapper”
想必你在谈论访问某种程度低Qt嵌入式与“framebuffer”的* linux *概念的截图,以及**不**谈论Qt的实际framebuffer *类*的OpenGL ...它只是有一个'toImage()'方法...? http://doc.qt.nokia.com/4.7-snapshot/qglframebufferobject.html#toImage – HostileFork
我从来没有见过这个类......看起来很有趣:-)无论如何,我想采取“低级别的截图” ,而不管绘制到帧缓冲区的内容。我已经看到一些有趣的结构在framebuffer头文件中,但我无法在任何地方找到有关这些信息的信息。 –
如果你想要那么低的水平,你可能想看看似乎在这里的fbgrab源代码:http://hem.bredband.net/gmogmo/fbgrab/。 – Torp