Мультимедиа

QImageReader: уменьшаем большое изображение до декодирования

Не загружайте оригинал, если нужен миниатюрный просмотр

Большая фотография может занимать много памяти в несжатом виде. QImageReader позволяет задать целевой размер до чтения; форматный плагин может декодировать уменьшенную версию эффективнее, если поддерживает такую возможность.

QImageReader reader(fileName);
reader.setAutoTransform(true); // применить ориентацию из метаданных
reader.setScaledSize(QSize(640, 480));

const QImage image = reader.read();
if (image.isNull()) {
    qWarning() << reader.errorString();
}

setScaledSize() задаёт размер результата, но конкретная экономия зависит от формата и плагина. Если уменьшение при декодировании не поддержано, после чтения можно масштабировать изображение через QImage::scaled() — это всё равно требует сначала выделить память под исходник.

Проверяйте ошибку чтения и ограничивайте допустимые размеры файла, если изображения приходят извне. Для списка миниатюр выполняйте загрузку вне GUI-потока и передавайте готовый QImage в интерфейс через безопасную очередь сигналов.