2011-10-27 59 views
0

有沒有辦法捕捉QML生成的整個屏幕?像在OpenGL或DirectX中複製繪圖緩衝區。這個想法是捕獲整個屏幕的輸出,然後用屏幕的攝像頭進行圖像減法,以便我們可以檢測到屏幕頂部的物體。如何捕獲QML繪圖緩衝區

謝謝。

回答

2

我認爲你想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; 
    } 
}; 
+0

QPixmap :: grabWidget()在這種情況下適用於我,因爲我的QML封裝在QWidget窗口中。感謝您的幫助。 –