MPO文件類型解碼(二)瞭解JPEG文件格式

l      DRIDefine Restart Interval,定義差分編碼累計復位的間隔

u 標記代碼                                2字節    固定值0xFFDD

u 包含2個具體字段:
 ①數據長度                            2字節    固定值0x0004,①~②兩個字段的總長度
                                                           即不包括標記代碼,但包括本字段
 MCU塊的單元中的重新開始間隔
                                             2字節    設其值爲n,則表示每nMCU塊就有一個
                                                         RSTn標記。第一個標記是RST0,第二個是
                                                           RST1等,RST7後再從RST0重複。

如果沒有本標記段,或間隔值爲0時,就表示不存在重開始間隔和標記RST

l      SOSStart of Scan,掃描開始12字節

u 標記代碼                         2字節    固定值0xFFDA

u 包含2個具體字段:
 ①數據長度                     2字節    ~④兩個字段的總長度
                                                   即不包括標記代碼,但包括本字段
 ②顏色分量數                1字節    應該和SOF中的字段⑤的值相同,即:
                                                    1:灰度圖是;3YCrCbYIQ4CMYK

                                                        JFIF中使用YCrCb,故這裏顏色分量數恆爲3
   ③顏色分量信息
        a)顏色分量ID          1字節
        b)直流/交流係數表號1字節    4位:直流分量使用的哈夫曼樹編號
                                                       4位:交流分量使用的哈夫曼樹編號

  壓縮圖像數據
        a)譜選擇開始                  1字節    固定值0x00
        b)譜選擇結束                  1字節    固定值0x3F
        c)譜選擇                          1字節    在基本JPEG中總爲00

本標記段中,字段③應該重複出現,有多少個顏色分量(字段②),就出現多少次(一般爲3次)。本段結束後,緊接着就是真正的圖像信息了。圖像信息直至遇到一個標記代碼就自動結束,一般就是以EOI標記表示結束。

l       EOIEnd of Image,圖像結束2字節

u 標記代碼                  2字節    固定值0xFFD9

這裏補充說明一下,由於在JPEG文件中0xFF具有標誌性的意思,所以在壓縮數據流(真正的圖像信息)中出現0xFF,就需要作特別處理。具體方法是,在數據0xFF後添加一個沒有意義的0x00。換句話說,如果在圖像數據流中遇到0xFF,應該檢測其緊接着的字符,如果是

10x00,則表示0xFF是圖像流的組成部分,需要進行譯碼;

20xD9,則與0xFF組成標記EOI,則圖像流結束,同時圖像文件結束;

30xD0~0xD7,則組成RSTn標記,則要忽視整個RSTn標記,即不對當前0xFF和緊接的0xDn兩個字節進行譯碼,並按RST標記的規則調整譯碼變量;

30xFF,則忽視當前0xFF,對後一個0xFF再作判斷;

4)其他數值,則忽視當前0xFF,並保留緊接的此數值用於譯碼。

二、       JPEG解碼過程詳解

下面來詳細講述JPEG文件的解碼過程。

1.讀入文件的相關信息

按照上述的JPEG文件數據存儲方式,把要解碼的文件的相關信息一一讀出,爲接下來的解碼工作做好準備。參考方法是,設計一系列的結構體對應各個標記,並存儲標記內表示的信息。其中圖像長寬、多個量化表和哈夫曼表、水平/垂直採樣因子等多項信息比較重要。以下給出讀取過程中的兩個問題。

1)整個文件的大體結構

JFIF格式的JPEG文件(*.jpg)的一般順序爲:

SOI(0xFFD8)

APP0(0xFFE0)

[APPn(0xFFEn)]可選

DQT(0xFFDB)

SOF0(0xFFC0)

DHT(0xFFC4)

SOS(0xFFDA)

壓縮數據

EOI(0xFFD9)

2)字的高低位問題

JPEG文件格式中,一個字(16位)的存儲使用的是Motorola格式,而不是Intel格式。也就是說,一個字的高字節(高8位)在數據流的前面,低字節(低8位)在數據流的後面,與平時習慣的Intel格式不一樣。.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章