我製作了jpeg解碼器,但是我沒有實現重啓標記的邏輯。這就是爲什麼我的程序無法在某些圖像上工作(例如,使用Photoshop保存的圖像:文件 - >另存爲 - > jpeg)。我想實現重新啓動標記邏輯,但沒有詳細的在線說明重新啓動標記邏輯的工作原理。請任何人都可以告訴我更多關於重新啓動標記的信息,或者向我建議在線資源,我可以在其中閱讀更多信息謝謝!Jpeg重啓標記
Q
Jpeg重啓標記
6
A
回答
13
重新啓動標記非常簡單。它們旨在允許在發生錯誤後重新同步。由於大多數JPEG圖像是通過無差錯通道傳輸的,因此很少需要它們。重啓時間間隔由FFDD標記定義爲2字節數字。這告訴重啓標記之間有多少個MCU。遇到重啓標記(FFD0-FFD7)時,將DC值(Y,Cr,Cb)重置爲0,並在字節邊界(FFDx後)開始比特流。這只不過是在解碼圖像時反覆計算重新啓動間隔的問題。重新開始標記值將從FFD0遞增到FFD7,然後再次從FFD0開始。標記值本身不是非常重要,但它可以指示是否缺少大塊數據。這是我在解碼器中如何做的一個例子。我在比特流閱讀器中丟棄重新啓動標記。
iRestartCount = iRestartInterval;
for (y=0; y<Height_in_MCUs; y++)
{
for (x=0; x<Width_in_MCUs; x++)
{
<decode an MCU>
if (iRestartInterval) // if there is a restart interval defined
{
if (--iRestartCount == 0)
{
iRestartCount = iRestartInterval; // reset restart inverval counter
iDCPred0 = iDCPred1 = iDCPred2 = 0; // reset DC predictors
if (*iBit & 7) // adjust bitstream to start on the next byte boundary
{
*iBit += (8 - (*iBit & 7));
}
} // if restart interval expired
} // if restart interval defined
} // for x
} // for y
更新:重新開始標誌,現在服務於一個新的目標 - 允許多線程JPEG編碼器和解碼器。由於MCU的每個「條帶」在每個重新啓動間隔開始時都會重置DC值,並在字節邊界上啓動,因此每個重新啓動間隔可以由不同的線程獨立編碼或解碼。編碼器現在可以任意地將任務分成N個線程,然後將數據與重新啓動標記「粘合」在一起。對於解碼器來說,這並不容易。如果存在重新啓動標記,則可以將每個間隔分配給不同的線程。如果不存在,您仍然可以執行一些預解碼技巧將作業分成多個線程。
相關問題
- 1. 是否在JPEG JFIF可選中重新啓動標記?
- 2. 解析JPEG SOS標記
- 3. 用pyexiv2地理標記JPEG
- 4. JPEG EOF與EOI標記
- 5. 的iOS:在標記APP3訪問JPEG元
- 6. 是否有可能以編程方式從JPEG圖像中刪除重新啓動標記?
- 7. 標記重複
- 8. PHP JPEG重採樣
- 9. 如何獲取原始jpeg數據(但沒有元標記/專有標記)
- 10. BufferedInputStream標記/重置無效標記
- 11. TokensRegex:重新標記後標記爲空
- 12. 重寫類!重要標記
- 13. kmllayer重疊標記?
- 14. Android:使用START_REDELIVER_INTENT標記檢測重新啓動的服務
- 15. 將VSIX包標記爲需要重新啓動
- 16. 如何在重啓後標記要刪除的目錄?
- 17. 如何在滾動條旁邊重新啓用可變標記?
- 18. 寫入/地理標記JPEG文件(EXIF數據)的Android
- 19. jQuery Cycle IE7 + 8問題 - 出現在JPEG上的白色標記
- 20. 爲什麼在jpeg文件中有幾個FFDA標記
- 21. JPEG文件結構無效:兩個SOI標記錯誤?
- 22. 想要檢查使用PIL的jpeg的windows標記
- 23. 從JPEG重構線條圖
- 24. JPEG標題丟失/損壞
- 25. 檢測窗口jpeg圖標
- 26. 使用JPEG格式的圖像啓動
- 27. 將所有JPEG URL重定向到單個JPEG NGINX
- 28. UITableView重複選中標記
- 29. 重新調整div標記
- 30. 在Access中標記重複
請你能告訴我更多的實現細節和邏輯嗎? – MrD 2012-01-20 00:04:09
如果是交織的多分量圖像會怎麼樣? – adikshit 2017-07-13 22:33:32
@adikshit - 據我所見,無論配置如何,重啓時間間隔都是指MCU(最小編碼單位)。對於3分量彩色圖像(Y/Cb/Cr),重啓間隔是指3個DCT塊的組。例如,間隔100將意味着300個DCT塊(100個MCU)。 – BitBank 2017-07-14 23:38:01