如何捕获QML绘图缓冲区

How to capture QML drawing buffer

本文关键字:缓冲区 绘图 QML 何捕获      更新时间:2023-10-16

是否有办法捕获由QML生成的整个屏幕?比如在OpenGL或DirectX中复制绘图缓冲区。这个想法是捕捉整个屏幕的输出,然后用屏幕的摄像头输入进行图像减法,这样我们就可以检测屏幕顶部的物体。

谢谢。

我认为你想要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;
  }
};