如何捕获 QML 绘图缓冲区
Posted
技术标签:
【中文标题】如何捕获 QML 绘图缓冲区【英文标题】:How to capture QML drawing buffer 【发布时间】:2011-10-27 00:47:51 【问题描述】:有没有办法捕获 QML 生成的整个屏幕?类似于 OpenGL 或 DirectX 中的复制绘图缓冲区。这个想法是捕获整个屏幕的输出,然后使用屏幕的摄像头进行图像减法,这样我们就可以检测到屏幕顶部的对象。
谢谢。
【问题讨论】:
【参考方案1】:我想你想要QPixmap::grabWindow(...)
,但恐怕我不使用 QML,所以我不确定你将如何获取像素图然后使用它。
查看一些 Qt 文档表明,子类化 QDeclarativeImageProvider
将是一个很好的起点。比如:
class cScreenGrabber : public QDeclarativeImageProvider
public:
cScreenGrabber ()
: QDeclarativeImageProvider(QDeclarativeImageProvider::Pixmap)
QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
QWidget *ViewWidget = //get the widget containing your view//
QPixmap Pixmap = QPixmap::grabWindow(ViewWidget.winId(), 0, 0,
requestedSize.width() > 0 ? requestedSize.width() : -1,
requestedSize.height() > 0 ? requestedSize.height() : -1);
if (size)
*size = QSize(Pixmap.width(), Pixmap.height());
return Pixmap;
;
【讨论】:
QPixmap::grabWidget() 在这种情况下对我有用,因为我的 QML 包装在 QWidget 窗口中。感谢您的帮助。以上是关于如何捕获 QML 绘图缓冲区的主要内容,如果未能解决你的问题,请参考以下文章