qt – 如何减少使用QImage保存png所需的时间?

使用Qt 4.8rc1,我有一个我要转换为png文件的Q
Image.似乎转换为png格式需要更长的时间:800×800空png需要~70ms.有没有办法让我更有效率,或者我本身就受到png / zlib的限制?

这是我正在运行的基准测试:

#include <QtGui>
#include <QTimer>


int
main(int argc, char *argv[]) {
  int times = 1000;
  QString format("png");

  QByteArray ba;
  QBuffer* buffer = new QBuffer(&ba);
  buffer->open(QIODevice::WriteOnly);

  QTime timer;
  timer.start();

  while(times--) {
    QImage image(800, 800, QImage::Format_RGB32);
    image.save(buffer, format.toAscii(), -1);
  }

  int elapsed = timer.elapsed();

  qDebug() << "Completed 1000 runs in" << elapsed << "ms. (" <<  (elapsed / 1000) << "ms / render )";
}

最佳答案
QImage::save(const QString & fileName, const char * format = 0, int quality = -1 )的第三个参数可能对您有所帮助.文档说明如下:

The quality factor must be in the range 0 to 100 or -1. Specify 0 to
obtain small compressed files, 100 for large uncompressed files, and
-1 (the default) to use the default settings.

如果您幸运,那么通过更改质量值,您可以更改zlib在尝试压缩图像数据上花费的时间.我会用各种质量值调用QImage :: save(),看看执行时间是否改变.

虽然Qt doc说质量必须在0到100的范围内,并且指定0以获得小的压缩文件,对于大的未压缩文件,指定为100,zlib manual显示不同的范围:

// Compression levels.
#define Z_NO_COMPRESSION         0
#define Z_BEST_SPEED             1
#define Z_BEST_COMPRESSION       9
#define Z_DEFAULT_COMPRESSION  (-1)

尝试基于两个范围的值.

点赞