减少QPixmap的文件大小

时间:2011-11-11 13:09:30

标签: c++ qt qpixmap qbytearray

当我使用scaledToHeight调整QPixmap的大小然后将其转换为QByteArray时,此ByteArray的大小正好是未缩放的QPixmap中ByteArray的大小。是否有可能缩小像素大小和文件大小的QPixmap?

祝你好运

1 个答案:

答案 0 :(得分:3)

这是一个概念验证,表明你正在做的事情当然是可能的。也许你可以看到你在做什么不同?

#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返回原始图片的缩放副本。它不直接缩放pixmap实例。
  • 如果您重复使用相同的QByteArray,则可能必须在查看大小差异之前将其截断。也就是说,即使实际内容小得多,QByteArray的容量也可能会更大。