簡體   English   中英

打磨IDAT塊以翻轉圖像

[英]Undersanding IDAT chunk to flip the image

首先是上下文。 我需要翻轉PNG圖片。 我得到每個字節的信息(按順序),我必須將其作為流翻轉。 我設法划分並解析這些塊。 但是當我擁有IDAT塊數據時,我不知道如何處理它來翻轉它。

IHDR中的INFO:位深度= 08(每個樣本8位),顏色類型=06。圖像為800 x 600 = 480000

IDAT大小為179502,因此是像素大小總數(奇怪)的0.374。

如果翻轉像素(所有IDAT數據都保持不變),則得到的圖像在打開時只會顯示透明圖像。 我也嘗試使用4個字節= 1像素,因為我具有RGB + alpha,但仍然沒有良好的效果。 (始終是透明圖像...也很奇怪...我希望是隨機圖像,而不是透明圖像)。

我已經了解到信息已壓縮,所以我的計划是對其進行解壓縮,翻轉RGB陣列,然后再次進行壓縮 ,但是...如何解壓縮並再次對其進行壓縮? 我找不到執行此操作的信息/算法。

我也幾乎總是在IDAT部分之后找到0x78十六進制,因此我推斷出壓縮像素數組不是直接在IDAT之后開始,而是在...之后一些字節開始。如果這樣的話, 它是如何組織的? 它是僅直接像素陣列還是在IDAT塊數據之前和/或之后有一些信息?

IDAT組塊包括圖像的像素數據,這些圖像數據經過預過濾和壓縮。 要獲得RGB,您需要:

  • 連接所有IDAT塊
  • 解壓縮流(ZLIB)
  • 取消過濾應用於每一行的過濾器
  • 根據圖像的像素格式 ,您可能在每個字節中或者在單詞中或者在某些位中都有RGB分量(也許它們不是RGB分量,而是索引到Palette,灰度或Alpha中。 ..)

簡而言之,您需要對PNG圖像進行解碼,這並非易事。 那里有很多PNG解碼器,所以我不知道您為什么要重新設計輪子。 如果您真的想自己做,那么您需要閱讀PNG標准的詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM