Сначала необходимо прочитать маркеры JPEG, чтобы определить метаданные.Метаданные, такие как размер, частота дискретизации (обычно 4: 2: 2, но не всегда), таблицы квантования и таблицы Хаффмана.
Затем необходимо де-Хаффман-кодировать энтропийно закодированные данныесегмент.Это даст вам коэффициент постоянного тока, за которым следуют любые коэффициенты переменного тока для цветового канала для каждого канала в зигзагообразной форме.Затем вы должны де зигзагообразовать записи и умножить их на соответствующую таблицу квантования.Наконец, вы должны предварительно преобразовать обратное дискретное косинусное преобразование в декодированном макроблоке.
Это даст вам 3 канала в YCrCb (YUV для аналога) с частотой дискретизации, с которой кодировался JPEG.Если вам нужно, чтобы оно было 4: 2: 2, вам придется выполнить повторную выборку.
Надеемся, у вас есть библиотека для фактического декодирования JPEG, поскольку написание такой, которая совместима, является нетривиальной задачей.
Вот очень простой и некорректный JPEG декодер, который я начал писать, чтобы дать вам больше технических деталей. Ruby JPEG декодер Не удалось успешно реализовать IDCT
Для правильной реализации в C Я предлагаю IJG