我想在我的Qt Qml應用程序中閱讀我的應用程序屏幕像素數據。如何閱讀我的應用程序屏幕像素數據與Qt
第一種方法是grabToImage()
,這在我的電腦中很快。但同樣需要幾秒鐘才能在我的嵌入式設備中抓取圖像。
於是,我就閱讀/dev/fb0
,使用QFile::readAll
,
QFile file("/dev/fb0");
QFile dataFile("/home/icu/WorkSpace/Samples/FBRead/Exe/data.bin");
if(!file.open(QIODevice::ReadOnly))
{
qDebug() << Q_FUNC_INFO << file.errorString();
}
if(!dataFile.open(QIODevice::WriteOnly))
{
qDebug() << Q_FUNC_INFO << dataFile.errorString();
}
QTextStream in(&file);
QString data;
qDebug() << Q_FUNC_INFO << "start read";
// while(!in.atEnd())
// {
qDebug() << Q_FUNC_INFO << "read";
data = in.readAll();
// qDebug() << Q_FUNC_INFO << data;
// }
QByteArray dataBytes;
dataBytes.append(data);
dataFile.write(dataBytes);
file.close();
dataFile.close();
我試圖打開文件的一些工具,可以顯示圖像從原始文件中讀取。但它沒有顯示任何數據。當我打開文件數據就像01 01 01 00 01 01 01 00 ...
是否有任何替代方法快速讀取我的屏幕像素數據?謝謝
我已經嘗試了文中提到的寫法,但在輸出文件中沒有發現任何區別。我現在要檢查抓鬥窗口。 :)謝謝你的帖子。 – Abin
噢,好吧,希望另一個至少提高性能......我已經更新了答案,以包含一些關於幀緩衝區格式的選項。 – cbuchart
我試過第二個選項,並且在我的電腦中看起來很快,但是當我在嵌入式設備'grabwindow()'中運行相同的結果時返回null。我的代碼是'QScreen * screen = QGuiApplication :: primaryScreen(); QPixmap pixmap = QPixmap(); QTime定時器; 定時器。開始(); pixmap = screen-> grabWindow(0); qDebug()<< Q_FUNC_INFO <<「time elapsed」<< timer.elapsed()<<「ms」; qDebug()<< Q_FUNC_INFO <<「pixmap is null」<< pixmap.isNull(); qDebug()<< Q_FUNC_INFO <<「保存爲」<< pixmap.save(「/ opt/img.png」); qDebug()<< Q_FUNC_INFO <<「Exits」;' – Abin