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

时间:2013-11-30 18:16:29

标签: c++ qt

我有一个名为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分钟。有没有什么方法可以用这个二进制文件更快地绘制?

非常感谢!!!

2 个答案:

答案 0 :(得分:0)

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

还研究“咬嚼”。

答案 1 :(得分:0)

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