QtGUI:加载二进制像素图的最快方法是什么

Qt GUI: what is the fastest way to load a binary pixmap?

本文关键字:方法 是什么 加载 二进制 像素 QtGUI      更新时间:2023-10-16

我有一个名为terrain.bil的二进制文件,它有54478160个项目,我想使用该文件中包含的信息绘制7988x6820像素图。这是我的代码:

QFile op("terrain.bil");
op.open(QIODevice::ReadOnly);
QByteArray rawArr = op.readAll();
const qint16 *rawData = (const qint16*) rawArr.data();
op.close();
QPixmap pixmap = QPixmap(7988,6820);
pixmap.fill(Qt::white);
QPainter pixPaint(&pixmap);
QPoint q1;
for(int i=0;i<6820;++i){
    for(int j=0;j<7988;++j){
        q1.setX(j);//QPixmap(#Col,#Row)
        q1.setY(i);
        if (rawData[i*7988+j] != -9999){
            pixPaint.setPen(QColor(floor(double(rawData[i*7988+j])*0.59),floor(double(rawData[i*7988+j])*0.59),floor(double(rawData[i*7988+j])*0.59),255));
        }
        else{
            pixPaint.setPen(Qt::green);
        }
        pixPaint.drawPoint(q1);
    }
}
scene->addPixmap(pixmap);

我试着一点一点地绘制像素图,花了1分钟的时间完成了双循环。有没有什么方法可以让我用这个二进制文件更快地绘图?

非常感谢!!!

我建议编写一个工具,绘制像素图并将其序列化为二进制文件
您可以直接将文件加载到像素图中,并调用一个函数来显示像素图。

也研究"比特闪电战"。

您可以使用QImage直接访问像素数据,而无需使用QPainter对象。这样就可以将QImage::setPixelqRgb宏一起使用。查看此处以获取有关此的更多信息。然后可以将QImage转换为QPixmap并将其添加到场景中。