java dib文件 加位图文件头_位图(bmp)文件格式分析
位圖(bmp)文件格式分析
作者:深藍(由博主分享)
一、什么是位圖
計算機能以位圖和矢量圖格式顯示圖像。
1、位圖(Bitmap):
圖像又稱點陣圖或光柵圖,它使用我們稱為像素(象素,Pixel)的一格一格的小點來描述圖像。計算機屏幕其實就是一張包含大量像素點的網(wǎng)格。當我們把位圖放大時,每一個像素小點看上去就像是一個個馬賽克色塊。
2、矢量圖(Vector)
使用直線和曲線來描述圖形,這些圖形的元素是一些點、線、矩形、多邊形、圓和弧線等等,它們都是通過數(shù)學公式計算獲得的。
位圖和矢量圖最簡單的區(qū)別就是:矢量圖可以無限放大,而且不會失真;而位圖則不能。
像Photoshop(PS)這樣主要用于處理位圖的軟件,我們稱之為圖像處理軟件;專門處理矢量圖的軟件,我們稱之為圖形設(shè)計軟件,例如Adobe Illustrator,CorelDRAW,Flash MX等。
二、BMP位圖文件
常見的圖像文件格式有:BMP、JPG(JPE,JPEG)、GIF等。
BMP圖像文件(Bitmap-File)格式是Windows采用的圖像文件存儲格式,在Windows環(huán)境下運行的所有圖像處理軟件都支持這種格式。Windows 3.0以后的BMP文件都是指設(shè)備無關(guān)位圖(DIB,device-independent bitmap)。BMP位圖文件默認的文件擴展名是.BMP,有時它也會以.DIB或.RLE作擴展名。
注:本文采用lena.bmp(512×512)做例子:
1、BMP文件結(jié)構(gòu)
BMP文件由4部分組成:
1.?? 位圖文件頭(bitmap-file header)
2.?? 位圖信息頭(bitmap-informationheader)
3.?? 顏色表(color table)
4.?? 顏色點陣數(shù)據(jù)(bits data)
24位真彩色位圖沒有顏色表,所以只有1、2、4這三部分。
用UltraEdit打開lena.bmp,可以看到這個文件的全部數(shù)據(jù)如下圖所示:
1、1位圖文件頭
位圖文件頭分4部分,共14字節(jié):
名稱
占用空間
內(nèi)容
實際數(shù)據(jù)
bfType
2字節(jié)
標識,就是“BM”二字
BM
bfSize
4字節(jié)
整個BMP文件的大小
0x000C0036(786486)
bfReserved1/2
4字節(jié)
保留字,沒用
0
bfOffBits
4字節(jié)
偏移數(shù),即 位圖文件頭+位圖信息頭+調(diào)色板 的大小
0x36(54)
注意,Windows的數(shù)據(jù)是倒著念的,這是PC電腦的特色。如果一段數(shù)據(jù)為50?1A?25 3C,倒著念就是3C 25 1A50,即0x3C251A50。因此,如果bfSize的數(shù)據(jù)為36 00 0C 00,實際上就成了0x000C0036,也就是0xC0036。
1、2位圖信息頭
位圖信息頭共40字節(jié):
名稱
占用空間
內(nèi)容
實際數(shù)據(jù)
biSize
4字節(jié)
位圖信息頭的大小,為40
0x28(40)
biWidth
4字節(jié)
位圖的寬度,單位是像素
0x200(512)
biHeight
4字節(jié)
位圖的高度,單位是像素
0x200(512)
biPlanes
2字節(jié)
固定值1
1
biBitCount
2字節(jié)
每個像素的位數(shù)
1-黑白圖,4-16色,8-256色,24-真彩色
0x18(24)
biCompression
4字節(jié)
壓縮方式,BI_RGB(0)為不壓縮
0
biSizeImage
4字節(jié)
位圖全部像素占用的字節(jié)數(shù),BI_RGB時可設(shè)為0
0x0C
biXPelsPerMeter
4字節(jié)
水平分辨率(像素/米)
0
biYPelsPerMeter
4字節(jié)
垂直分辨率(像素/米)
0
biClrUsed
4字節(jié)
位圖使用的顏色數(shù)
如果為0,則顏色數(shù)為2的biBitCount次方
0
biClrImportant
4字節(jié)
重要的顏色數(shù),0代表所有顏色都重要
0
作為真彩色位圖,我們主要關(guān)心的是biWidth和biHeight這兩個數(shù)值,兩個數(shù)值告訴我們圖像的尺寸。biSize,biPlanes,biBitCount這幾個數(shù)值是固定的。想偷懶的話,其它的數(shù)值可以一律用0來填充。
1、3顏色表
24位真彩色位圖沒有顏色表。為了簡化,只討論24位真彩色位圖。
1、4顏色點陣數(shù)據(jù)
位圖全部的像素,是按照自下向上,自左向右的順序排列的。
RGB數(shù)據(jù)也是倒著念的,原始數(shù)據(jù)是按B、G、R的順序排列的。
三、Photoshop和Windows的BMP文件比較
Windows的BMP文件最后少了兩個0字節(jié),沒有整體補位。bfSize(文件大小),biSizeImage(全部像素大小)也相應(yīng)地減去2。
打開Photoshop,新建一個尺寸為2*3像素的文件:
放大圖片到最大(1600%),然后用鉛筆工具對每個像素都點一個不同顏色的點,如下圖所示:
儲存這個文件為BMP格式,文件名為“MyBmp.bmp”,在BMP選項中選擇Windows,24位:
你應(yīng)該注意到圖中用黑色框起來的00 00了,在每行顏色的末尾添加的兩個0字節(jié),是為了行補位。為什么要行補位呢?因為32位的Windows操作系統(tǒng)處理4個字節(jié)(32位)的速度比較快,所以BMP的每一行顏色占用的字節(jié)數(shù)規(guī)定為4的整數(shù)倍。MyBmp.bmp中一行顏色有兩個像素,共占用6字節(jié),如果要補齊4*2=8字節(jié),就要再加兩個0字節(jié)。
行補位的公式為:widthBytes = (width*biBitCount+31)/32*4
參數(shù)說明:
Width:位圖的實際寬度
biBitCount:每個像素的位數(shù)
1-黑白圖,4-16色,8-256色,24-真彩色
注:Phtoshop在文件的末尾還補充了兩個0字節(jié),好像是要整體補位。不過我看過的BMP資料中都沒有提到還要整體補位的,其它軟件生成的BMP文件也沒有整體補位的,這看起來像是Adobe的獨創(chuàng),不知道目的何在。
PS:文章最后注的內(nèi)容將由下篇文章解釋
總結(jié)
以上是生活随笔為你收集整理的java dib文件 加位图文件头_位图(bmp)文件格式分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无悔入华夏怎么一直显示服务器,无悔入华夏
- 下一篇: gps频率范围_一种应用于低电压GPS接