Я не знаю библиотеки, которая могла бы сделать это с полки, но это, безусловно, возможно.
Допустим, ваш JPEG использует микроконтроллеры 8x8 пикселей (единицы, в которых сгруппированы пиксели). Также допустим, что вы уменьшаете коэффициент до 12 к 1. Первый выходной пиксель должен быть средним для блока пикселей 12x12 в левом верхнем углу входного изображения. Чтобы получить входные пиксели с координатой y, превышающей 8, необходимо декодировать начало второго ряда MCU. Вы не можете реально декодировать эти пиксели перед декодированием всего первого ряда MCU. На практике это, вероятно, означает, что вам нужно хранить две строки декодированных блоков MCU. Тем не менее, для изображения размером 12000x12000 пикселей (примерно 150 мегапикселей) вы бы сократили требования к памяти в 12000/16 = 750 раз. Этого должно быть достаточно для ПК. Если вы рассматриваете использование встраиваемых систем, вы можете изменять размеры строк MCU по горизонтали по мере их чтения, снижая требования к памяти еще в 12 раз, за счет немного большей сложности кода.
Я бы нашел простую библиотеку jpeg-декодера, такую как Tiny Jpeg Decoder , и посмотрел бы на основной цикл в функции jpeg decode. В случае Tiny Jpeg Decoder основной цикл вызывает decode_MCU, оттуда изменить. : -)
У вас есть куча непростой работы, чтобы заставить код работать для не 8x8 MCU и увеличить нагрузку, если вы хотите уменьшить не на целое число. Звучит как весело, хотя. Удачи.