Я пытаюсь написать кодировщик и декодер JPEG / JFIF с нуля, используя C. Я экспериментировал с написанием примера файла JPEG, но, похоже, я не могу открыть его с помощью MS Paint, Firefox.Но я могу декодировать его, используя JPEGsnoop (http://www.impulseadventure.com/photo/jpeg-snoop.html?ver=1.5.2) и http://nothings.org/stb_image.c. Я думаю, что образец файла JPEG соответствует стандарту JPEG / JFIF, я не знаю, почему приложения, такие как MS paint и Firefox, не могут его открыть.
Вот как выглядит пример JPEG:
SOI
APP0 segment
DQT segment (contains two quantization tables)
COM segment
SOF0 segment
DHT segment (contains four Huffman tables)
SOS segment
huffman encoded data
EOI
Файл примера JPEG содержит три компонента Y Cb Cr. Нет подвыборки для компонента Cb Cr. Все две таблицы квантования заполнены.Четыре таблицы Хаффмана в сегменте DHT все идентичны, это выглядит так:
[0 0 0 0 0 0 0 255 0 0 0 0 0 0 0 0]
[0,1,2, ... , 254]
Это означает, что все коды являются 8-битными, поэтому кодирование Хаффмана на самом деле не сжимает данные.
Закодированные Хаффманом данные выглядят так:
[0x0000(DC) 0x0000(AC)](Y)
[0x0000(DC) 0x0000(AC)](Cb)
[0x0000(DC) 0x0000(AC)](Cr) for all (i, j) MCUs except (10, 10)
the data in (10, 10) MCU:
[0x0008(DC) 0x0000(DC), 0x0000(AC)](Y)
[0x0000(DC) 0x0000(AC)](Cb)
[0x0000(DC) 0x0000(AC)](Cr)
Может кто-нибудь сказать мне, что не так с этим образцом файла JPEG? Спасибо.
Вот ссылка на образец файла JPEG (ха.JPG) http://www.guoxiaoyong.net/ha.jpg