有没有办法捕获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;
  }
};

关于c++ - 如何捕获QML绘图缓冲区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7910586/

10-13 03:21