有没有办法捕获QML生成的整个屏幕?像OpenGL或DirectX中的复制绘图缓冲区。我们的想法是捕获整个屏幕的输出,然后使用屏幕的摄像头进行图像减法,这样我们就可以检测到屏幕顶部的对象。
谢谢。
答案 0 :(得分:2)
我认为你想要QPixmap::grabWindow(...)
,但我担心我不使用QML所以我不确定你将如何获得pixmap或者使用它。
查看一些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;
}
};