在循环中而不是在主线程中使用 QPainter 和 QImage
Using QPainter with QImage in a loop not in a main thread
通过这个简单的循环:
for(int i=0;i<levels;i++)
{
QImage stub(QSize(w,h),QImage::Format_RGB888);
QPainter painter(&stub);
painter.setFont(QFont("Monospace",8));
painter.setPen(Qt::magenta);
painter.drawText(stub.rect(),
Qt::AlignVCenter|Qt::AlignCenter,
QString("LAYER-%1").arg(i));
stub.save(QString("layer%1.jpg").arg(i),"JPG");
}
我得到了一个有趣的结果:
注意打印在图像上的层数。
这看起来像是一些缓冲问题。我还应该提到这个循环不在主线程中运行。
如何同步QPaitner和QImage保存?
好的,这个不错的错误。
您正在使用未初始化的QImage
!
http://doc.qt.io/qt-4.8/qimage.html#QImage-2
Warning: This will create a QImage with uninitialized data. Call fill() to fill the image with an appropriate pixel value before
drawing onto it with QPainter.
所以在每次迭代中,相同的内存块被分配给 QImage
,它以前属于前一个 QImage
。你很不走运,在第一次迭代中你有一块清晰的内存而不是一些垃圾值。
调用 fill 方法来解决这个问题。
通过这个简单的循环:
for(int i=0;i<levels;i++)
{
QImage stub(QSize(w,h),QImage::Format_RGB888);
QPainter painter(&stub);
painter.setFont(QFont("Monospace",8));
painter.setPen(Qt::magenta);
painter.drawText(stub.rect(),
Qt::AlignVCenter|Qt::AlignCenter,
QString("LAYER-%1").arg(i));
stub.save(QString("layer%1.jpg").arg(i),"JPG");
}
我得到了一个有趣的结果:
注意打印在图像上的层数。 这看起来像是一些缓冲问题。我还应该提到这个循环不在主线程中运行。 如何同步QPaitner和QImage保存?
好的,这个不错的错误。
您正在使用未初始化的QImage
!
http://doc.qt.io/qt-4.8/qimage.html#QImage-2
Warning: This will create a QImage with uninitialized data. Call fill() to fill the image with an appropriate pixel value before drawing onto it with QPainter.
所以在每次迭代中,相同的内存块被分配给 QImage
,它以前属于前一个 QImage
。你很不走运,在第一次迭代中你有一块清晰的内存而不是一些垃圾值。
调用 fill 方法来解决这个问题。