bmp format 大概已是被討論到翻的一個議題,這篇文章不會討論 format ,只會列一些 resource 。當然如果用 OpenCV 、OpenGL ,大概就沒這方面困擾。

 

1. bmp in Wiki : wiki 其實已講完了,有興趣可切到中文 wiki ,敘述不同,英文較詳盡。

2.  瘋小喵 : 這篇算是中文對 bmp 介紹最詳盡的一個。

3. MSDN Bitmaps : 這裡講 Win32 bitmap struct , 截圖, 畫圖, 存圖。

 

要完整正確操作 bmp 必須花些時間 k 過 format 。一些範例會假設來源檔是 24 bpp,這時大多初學者只讀 filesize (有些甚至不讀 filesize) 、width、height 這三個 field,但撰碼仍漏重要資訊。

 

0. struct padding 問題。當然如果不用 struct 就沒這問題。

1. 若 width 本身不是 4 的倍數,每個 raw 在尾端會塞到 4 的倍數。所以會看到像  ( (width * 3 + 3)/ 4 )* 4  這類型莫名的運算,簡單的說每一 width 要 alignment to 4's multiple。

2. filesize = 54 + width * hegiht * 3 , 未必成立, 且蠻多時候不成立, 至少要知道 offset field 是幹嘛的 ( 真正 image raw data 開始位置)。

3. filesize field 實際上不一定真的是檔案大小, 有興趣可試一下, 在 bmp 尾端再塞一點文字進去 , filesize field 應不會改變 ( 以前測是不會變)

4. height 本身是有號數而不是無號數,負數有其代表的意義 ( 上下顛倒 )。

5. endian 問題, 不過大多都已被假設成 little endian 了吧。

 

附註一下,筆者 image process 其實沒很強,只是有段時間在做 image sensor bin 別分類,要判斷 dead-pixel 、wood pixel、刮傷、水漬 、髒污 等判斷 ( 後面那幾種真的很難分辨) ,所以沒拿現有 library (OperCV, OpenGL) 進來用,只拿 DirectX 來開 image sensor ,不過久沒碰該忘的都忘光了。

arrow
arrow
    全站熱搜

    edisonx 發表在 痞客邦 留言(0) 人氣()