Вот подтверждение концепции, которая показывает, что то, что вы делаете, безусловно, возможно. Может быть, вы видите, что вы делаете по-другому?
#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
, возможно, вам придется его обрезать, чтобы увидеть разницу в размере. То есть емкость 1014 * массива QByteArray может оставаться большей даже при том, что фактическое содержимое 1016 * намного меньше.