如何捕获 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 绘图缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

如何保存我的绘图? (基本绘画应用程序)

我正在尝试在 opentk 中实现索引缓冲区对象,但不知道在绘图时如何实际使用它

如何捕获麦克风缓冲区原始数据? [关闭]

如何捕获麦克风缓冲区

如何在cpp中解析从套接字捕获的数据包?

单缓冲和双缓冲 有啥区别