該
突出顯示區域之前的位元組用于 PNG 檔案頭和 IHDR。這表明我正在嘗試制作一個
- 10 x 10 Png 檔案
- 灰度色彩空間
- 1 位深度(雙層)
- 放氣壓縮?
- 自適應過濾?
- 無隔行
突出顯示的位元組是 IDAT 欄位未來長度的占位符。
問題:-現在我不確定應該將影像資料放在 IDAT 欄位中的什么(或如何?)?
我知道影像的像素值是MxN維度的矩陣。顯示有點像:
[ (255, 255, 255), (255, 255, 255) ... (255, 255, 255)]
[ (255, 255, 255), (255, 255, 255) ... (255, 255, 255)]
[ (255, 255, 255), (255, 255, 255) ... (255, 255, 255)]
[ (255, 255, 255), (255, 255, 255) ... (255, 255, 255)]
白色 RGB 影像的像素值,其中左上角元組是像素的顏色值,(0, 0)右下角是(m-1, n-1).
現在我應該如何將其編碼到 IDAT 標頭的資料結構中?我想知道的是如何將上述值(像素值)轉換為 deflate 塊?
PS:-我不太了解 Deflate 的作業原理或 png 檔案中使用的過濾演算法。我已閱讀 Png 檔案的 RFC 2083 和維基百科頁面。我還閱讀了有關堆疊交換的所有相關答案。
uj5u.com熱心網友回復:
由于我還不能發表評論,我會發布一個答案。
在這種情況下,您可能會為每種顏色使用 6 個位元組的十六進制 (#RRGGBB)。具有以下 RGB 值的像素串列:255 0 255, 0 0 255, 255 255 255將變為:ff00ff 0000ff ffffff。
根據這個問題的所有位元組的IDAT內連接在一起,所以你應該得到的東西,如:ff00ff0000ffffffff。
但我不是 100% 確定這是否正確,事實上我有一個類似的問題。
uj5u.com熱心網友回復:
IDAT 內容是 deflate 流,它是壓縮資料。Deflate 記錄在RFC 1951 中,并且太復雜而無法在此處提供答案。
被壓縮的資料是經過過濾的像素行,其中每一行前面都有一個位元組,標識用于該行的過濾器。
對于您的示例,每個像素都是一個bit,因此十位占用兩個位元組(第二個位元組的低六位未使用)。每行總共是三個位元組。十行是 30 個位元組。然后將這 30 個位元組壓縮為 deflate 流。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/398330.html
上一篇:Firefox和Chrome上的Javascript影像加載失敗
下一篇:無法將型別“System.Collections.Generic.List<ValueObjectLayer.booksVAL>”隱式轉換為“int”
