Как я могу уменьшить количество времени, необходимое для сохранения png с помощью QImage? - PullRequest
4 голосов
/ 31 октября 2011

Используя Qt 4.8rc1, у меня есть QImage, который я хочу преобразовать в png файл. Похоже, что для преобразования в формат PNG требуется больше времени: ~ 70 мс для 800x800 пустого PNG. Есть ли способ, которым я могу сделать это более эффективным, или я просто ограничен 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 )";
}

1 Ответ

2 голосов
/ 31 октября 2011

Третий аргумент QImage :: save (const QString & fileName, const char * format = 0, int quality = -1) может помочь вам.В документации сказано следующее:

Коэффициент качества должен находиться в диапазоне от 0 до 100 или -1.Укажите 0 для получения небольших сжатых файлов, 100 для больших несжатых файлов и -1 (по умолчанию), чтобы использовать настройки по умолчанию.

Если вам повезет, изменив значение качества, вы можете изменитьсколько времени тратит zlib на сжатие данных изображения.Я бы вызвал QImage :: save () с различными значениями качества и увидел бы, изменяется ли время выполнения.

Хотя в Qt doc сказано, что качество must be in the range 0 to 100 и specify 0 to obtain small compressed files, 100 for large uncompressed files zlib manual показывает другой диапазон:

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

Попробуйте значения, основанные на обоих диапазонах.

...