#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 может оставаться больше, даже несмотря на то, что фактическое содержимое намного меньше.