BMP 和 DIB
原文轉載鏈接 ? ?http://blog.sina.com.cn/s/blog_6c5a47d30102uxp6.html
現在我們常見到的.bmp圖像,成為位圖(Bitmap)。位圖在內存中有兩種類型,即:設備相關位圖(DDB:Device-independent bitmaps)和設備無關位圖(DIB:Device-independent bitmaps)。【可以這樣理解,這種圖像在硬盤上被稱為BMP圖,在內存中則被叫做DDB或DIB。】
DDB位圖在早期的Windows系統(Windows 3.0以前)中是很普遍的,事實上它也是唯一的。然而,隨著顯示器制造技術的進步,以及顯示設備的多樣化,DDB位圖的一些固有的問題開始浮現出來了。比如,它不能夠存儲(或者說獲取)創建這張圖片的原始設備的分辨率,這樣,應用程序就不能快速的判斷客戶機的顯示設備是否適合顯示這張圖片。為了解決這一難題,微軟創建了DIB位圖格式。
換言之,我們現在電腦里面的.bmp圖基本上可以都認為是DIB。A bitmap image file loaded into memory becomes a DIB data structure
?
BMP 由以下幾部分組成:【可以先看本頁最后的圖】
請注意:1,2,3,4組成了BMP,2,3,4組成了DIB
1.BMP文件頭:
BMP文件頭數據結構含有BMP文件的類型、文件大小和位圖起始位置等信息。
其結構定義如下:
2. DIB頭
BMP位圖信息頭數據用于說明位圖的尺寸等信息。下面兩個圖,左邊是C++里的定義及意義,后面的是實際的存儲。
??3. 調色板
用于說明位圖中的顏色,它有若干個表項,每一個表項是一個RGBQUAD類型的結構,定義一種顏色。RGBQUAD結構的定義如下:
?
顏色表中RGBQUAD結構數據的個數有biBitCount來確定:
當biBitCount=1,4,8時,分別有2,16,256個表項;
當biBitCount=24時,沒有顏色表項。
?
位圖信息頭和顏色表組成位圖信息,BITMAPINFO結構定義如下:
?
4. 位圖數據,即像素值
位圖數據記錄了位圖的每一個像素值,記錄順序是在掃描行內是從左到右,掃描行之間是從下到上。位圖的一個像素值所占的字節數:
當biBitCount=1時,8個像素占1個字節;
當biBitCount=4時,2個像素占1個字節;
當biBitCount=8時,1個像素占1個字節;
當biBitCount=24時,1個像素占3個字節,按順序分別為B,G,R;
當biBitCount=32時,1個像素占4個字節,按順序分別為B,G,R,α;α表示透明度,黑為全透明,白為不透明,灰色為半透明
Windows規定一個掃描行所占的字節數必須是4的倍數(即以long為單位),不足的以0填充,
biSizeImage = ((((bi.biWidth * bi.biBitCount) + 31) & ~31) / 8) * bi.biHeight;
?
只要把這四塊信息寫好,圖像就是沒問題的,還有一些可缺省的項,詳見參考1.
?
參考:
1.?http://en.wikipedia.org/wiki/Device-independent_bitmap
2.?http://baike.baidu.com/subview/7671/8245150.htm
?
總結
- 上一篇: 模糊照片修复软件有什么?这些软件大家都在
- 下一篇: javascript时间戳转日期格式以及