有一個question with the same title但不幸的是它不能幫助我。解析JPEG SOS標記
我想解析一個SOS標記的數據。我可以找到的所有文檔都說,在標記(0xFFDA
)後面跟隨一個兩字節數字,它定義了該段的長度 - for example here - 與大多數可變大小的標記一樣。但在這種情況下,我似乎沒有正確理解它。它適用於所有其他標記類型。
我檢查了多個文件,但不能得到這個權利。這個數字沒有定義完整的SOS字段有多長?因此,對於基線JPEG,應該有一個SOS片段,在此之後應該結束圖像標記。如果是漸進的,可以有多個SOS段,但仍然都應該有一個長度字段。
我有一張帶有SOF0
標記的圖片,所以它應該是基線。我相信這是正確的SOFn
標記,因爲可以在該標記之後找到圖像分辨率。使用十六進制編輯器,我發現3 0xFFDA
標記,並且它們全部在以下2個字節中有0x000C
。因此,據我瞭解,該段應始終爲12字節。但在所有3種情況下,在12個字節的數據之後沒有新的標記。我想最後一個是我正在尋找的掃描,因爲如果值0xFF
出現,它後面是0x00
- 除了重置標記。
這兩個字節跟在0xFFDA
之後不是長度字段嗎?
編輯: 所以感謝意見,回答似乎是實際的壓縮數據,只知道它在哪裏結束似乎對其進行解碼方式沒有長度字段。
爲什麼基線DCT圖像有多個掃描?我會理解爲什麼它有兩個;主圖像和縮略圖,但第三次掃描是什麼?
但還有一件事。根據DRI標記(定義重新啓動間隔),它包含掃描應該有一個重新開始標記0xFFD0 - 0xFFD7
之後的值。但我似乎錯誤地認爲,或者我不這樣做是正確的。例如,標記包含值0x0140
作爲重新啓動間隔。在下面的掃描中,我從頭開始搜索第一個0xFFD0
,但後來是862字節而不是320.
FFDA之後的2個字節是長度(12),但緊接在SOS標記之後是壓縮圖像數據。您需要解碼數據的「掃描」,並且下一個FFxx標記將位於壓縮數據之後。 – BitBank 2014-11-03 14:06:29
@BBBank,所以沒有字段告訴我壓縮數據有多長? – ap0 2014-11-03 15:10:06
壓縮數據沒有長度字段;必須對其進行解碼才能找到結尾,或者如果必須知道結束位置,請在FFDA之後查找下一個FFD9標記。 – BitBank 2014-11-03 17:16:32