2008年5月20日 星期二

BMP file format

一個典型的BMP檔案,由四個部份組成,包括了

  • BMP Header
  • Bitmap information
  • Color Palette
  • Bitmap Data

其中,真正的畫面資料存在Bitmap Data處。

詳細的規格可以參考WIKI瘋小貓的華麗冒險介紹。

其中,瘋小貓是中文的,介紹很清楚,可以用C照著弄出struct,再寫入file,try try看PC能不能正常show出來。至少我在RGB555及RGB565都成功了。 :)

有幾個地方需特別注意的。

  1. 如果要用RGB565格式,Bit_Per_Pixel需設為16,Compression需設為BI_BITFIELDS(就是3啦),而且,最最最重要的,color palette的地方,需依序填入三個各為32位元的值:0xF800、0x07E0、0x001F,這三個值分別是紅、綠、藍的mask值。在這三個值之後,緊接著bitmap data。
  2. RGB555不需color palette。DIB Header之後緊接著bitmap data即可。
  3. resolution值如果設為0,windows下會變成96dpi。
  4. 如果height是正值,要注意,畫面是由底向上儲存的,如果從最上面開始存的話,畫面會上下顛倒。
  5. 如果使用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的說明。

沒有留言: