我想在我的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