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

#c #qt #qpixmap #qbytearray

#c #qt #qpixmap #qbytearray

Вопрос:

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

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

Комментарии:

1. Не могли бы вы опубликовать какой-нибудь код? Я много раз масштабировал QPixmap , и результирующий массив байтов определенно меньше.

Ответ №1:

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

 #include <QtGui>

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

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

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

  return app.exec();
}
  

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

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