use*_*761 2 qt qpainter qimage
通过这个简单的循环:
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");
}
Run Code Online (Sandbox Code Playgroud)
我得到一个有趣的结果:

请注意图像上打印的图层编号.这看起来像一些缓冲问题.我还要提一下,这个循环不在主线程中运行.如何同步QPaitner和QImage保存?
好的,这个好bug.
你正在使用未初始化的QImage!
http://doc.qt.io/qt-4.8/qimage.html#QImage-2
警告:这将创建一个包含未初始化数据的QImage.在使用QPainter绘制图像之前,调用fill()以使用适当的像素值填充图像.
因此,在每次迭代中,分配了相同的内存块QImage,之前由之前拥有QImage.你运气不好,在第一次迭代中你有一些清晰的记忆而不是一些垃圾值.
调用填充方法来解决这个问题.
| 归档时间: |
|
| 查看次数: |
341 次 |
| 最近记录: |