我有一个名为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分钟。有没有什么方法可以用这个二进制文件更快地绘制?
非常感谢!!!
答案 0 :(得分:0)
我建议编写一个工具来绘制像素图并将它们序列化为二进制文件 您可以将文件直接加载到像素图中并调用函数来显示像素图。
还研究“咬嚼”。
答案 1 :(得分:0)
您可以使用QImage
直接访问像素数据,而无需使用QPainter
对象。
这样您就可以QImage::setPixel
使用qRgb
宏。查看here以获取有关此内容的更多信息。然后,您可以将QImage
转换为QPixmap
并将其添加到您的场景中。