4

Qt 4.8rc1 を使用して、png ファイルに変換したい QImage があります。png 形式に変換するのに必要以上に時間がかかっているようです: 800x800 の空の 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 )";
}
4

1 に答える 1

3

QImage :: save(const QString&fileName、const char * format = 0、int quality = -1)の3番目の引数が役立つ場合があります。ドキュメントには次のように書かれています。

品質係数は、0〜100または-1の範囲内である必要があります。小さい圧縮ファイルを取得する場合は0を指定し、大きい非圧縮ファイルを取得する場合は100を指定し、デフォルト設定を使用する場合は-1(デフォルト)を指定します。

運が良ければ、品質の値を変更することで、zlibが画像データの圧縮に費やす時間を変更できます。さまざまな品質値を使用してQImage::save()を呼び出し、実行時間が変更されるかどうかを確認します。

Qtのドキュメントには、品質must be in the range 0 to 100zlibのマニュアルには異なる範囲が示されspecify 0 to obtain small compressed files, 100 for large uncompressed filesていると書かれていますが、次のようになります。

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

両方の範囲に基づいて値を試してください。

于 2011-10-31T09:23:57.330 に答える