Qt Qmlアプリケーションでアプリケーション画面のピクセルデータを読み込もうとしています。Qtでアプリケーション画面のピクセルデータを読み取る方法
最初のアプローチはgrabToImage()
で、私のPCで高速です。しかし、同じことが、組み込み機器で画像を取得するのに数秒かかることもあります。
だから、私は、画像をRAWファイルからの読み込みを示すいくつかのツールを使用してファイルを開こうとしました、QFile::readAll
を使用して、/dev/fb0
を読み取るために
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
ああ、もう1つはパフォーマンスを改善してくれることを願っています...フレームバッファのフォーマットに関する2つのオプションを含める答えを更新しました。 – cbuchart
私は2番目のオプションを試してみましたが、私のPCでは高速ですが、埋め込みデバイスで同じものを実行すると、 'grabwindow()'はnullを返します。私のコードは 'QScreen * screen = QGuiApplication :: primaryScreen();です。 QPixmap pixmap = QPixmap(); QTimeタイマー。 タイマー。開始(); pixmap = screen-> grabWindow(0); qDebug()<< Q_FUNC_INFO << "時間経過" << timer.elapsed()<< "ms"; qDebug()<< Q_FUNC_INFO << "pixmapがnullです" << pixmap.isNull(); qDebug()<< Q_FUNC_INFO << ""は "<< pixmap.save("/opt/img.png ");は保存されています。 qDebug()<< Q_FUNC_INFO << "Exit"; ' – Abin