Уменьшить размер файла QPixmap

когда я изменяю размер QPixmap с помощью scaledToHeight, а затем преобразовываю его в QByteArray, размер этого ByteArray точно равен размеру ByteArray из немасштабированного QPixmap. Есть ли возможность уменьшить QPixmap по размеру пикселя и размеру файла?

С наилучшими пожеланиями


person user1037319    schedule 11.11.2011    source источник
comment
Не могли бы вы опубликовать код? Я масштабировал QPixmap много раз, и результирующий массив байтов определенно меньше.   -  person Dave Mateer    schedule 11.11.2011


Ответы (1)


Вот доказательство концепции, которое показывает, что то, что вы делаете, безусловно, возможно. Может быть, вы видите, что вы делаете по-другому?

#include <QtGui>

int main(int argc, char **argv) {
  QApplication app(argc, argv);

  QPixmap pixmap("/path/to/image.jpg");
  QByteArray bytes1;
  QBuffer buffer1(&bytes1);
  buffer1.open(QIODevice::WriteOnly);
  pixmap.save(&buffer1, "png");
  qDebug() << bytes1.size();

  pixmap = pixmap.scaledToHeight(100);
  QByteArray bytes2;
  QBuffer buffer2(&bytes2);
  buffer2.open(QIODevice::WriteOnly);
  pixmap.save(&buffer2, "png");
  qDebug() << bytes2.size();

  return app.exec();
}

Два предположения:

  • scaledToHeight возвращает масштабированную копию исходного изображения. Он не масштабирует экземпляр растрового изображения напрямую.
  • Если вы повторно используете один и тот же QByteArray, вам, возможно, придется обрезать его, прежде чем вы увидите разницу в размере. То есть емкость массива QByteArray может оставаться больше, даже если фактическое содержимое намного меньше.
person Dave Mateer    schedule 11.11.2011