一個典型的BMP檔案,由四個部份組成,包括了
- BMP Header
- Bitmap information
- Color Palette
- Bitmap Data
其中,真正的畫面資料存在Bitmap Data處。
其中,瘋小貓是中文的,介紹很清楚,可以用C照著弄出struct,再寫入file,try try看PC能不能正常show出來。至少我在RGB555及RGB565都成功了。 :)
有幾個地方需特別注意的。
- 如果要用RGB565格式,Bit_Per_Pixel需設為16,Compression需設為BI_BITFIELDS(就是3啦),而且,最最最重要的,color palette的地方,需依序填入三個各為32位元的值:0xF800、0x07E0、0x001F,這三個值分別是紅、綠、藍的mask值。在這三個值之後,緊接著bitmap data。
- RGB555不需color palette。DIB Header之後緊接著bitmap data即可。
- resolution值如果設為0,windows下會變成96dpi。
- 如果height是正值,要注意,畫面是由底向上儲存的,如果從最上面開始存的話,畫面會上下顛倒。
- 如果使用struct,需注意,有時候會莫名奇妙多出幾個byte,可以試著使用#pragma的方式解決:在struct開頭之前加上以下兩行
#pragma pack(push) /* push current alignment to stack */
#pragma pack(1) /* set alignment to 1 byte boundary */
在struct結尾後加上以下一行
#pragma pack(pop) /* restore original alignment from stack */
相關文件可參考Wiki關於Data Structure alignment的說明。