我們在編程的時辰,有的時辰會用到BMP文件的存儲以及讀取,這個時辰就需要對BMP文件格局有一個大要的領會才能順遂的讀取以及存儲BMP文件
BMP文件總體來說由四部門組成,別離為位圖文件頭、位圖信息頭、彩色表和圖像數據陣列。知道了文件的構成那么大要說一下文件這幾部門巨細:
位圖文件頭巨細為14字節,
位圖信息頭為40字節,
彩色表按照BMP圖的分歧(我感受這里的分歧指的就是日常平凡說的單色位圖、8位位圖以及16位位圖或者24位位圖這種分歧)而巨細分歧
圖像數據陣列就是看圖片的巨細而分歧了,接下來具體針對分歧部門來進行詮釋,如下圖:
位圖文件頭如下圖有五個部門構成,依次進行詮釋:
1.bfType:2字節 暗示位圖類型,因為這里解析的是BMP文件,所以這兩個字節為BM
2.bfSize:4字節 暗示文件的巨細
3.bfReserved1:2字節 這個是保留的,為0
4.bfReserved2:2字節 這個也是保留的,為0
5.bfOffBits:4字節 這個是說文件起頭到現實圖像數據之間的字節偏移量,我理解的文件包羅四個部門,最后一個部門為現實圖像數據,所以這個量指的就是前三個內容的巨細
下圖中的變量BITMAPINFO布局暗示位圖信息頭,包羅兩個部門,別離詮釋:
1.bmiHeader 40字節 暗示位圖文件信息頭 這個在步調2進行具體詮釋
2.bmiColors 字節不心猿意馬 暗示彩色表 這個在步調3進行具體詮釋
下圖中暗示的就是bmiHeader 位圖信息頭的構成部門,別離進行詮釋:
1.biSize 4字節 暗示位圖文件信息頭的巨細(為40 單元是字節)
2.biWidth 4字節 暗示位圖文件的寬度(像素)
3.biHeight 4字節 暗示位圖文件的高度(像素)
4.biPlanes 2字節 不太理解,一般為1
5.biBiCount 2字節 這個就是常說的幾位位圖,值為1/4/8/16/24/32
6.biCompression 4字節 暗示位圖文件的壓縮體例,默認0 暗示沒有壓縮
7.biSizeImage 4字節 暗示圖像的巨細,當沒有壓縮的時辰,這個值可覺得0
8.biXPelsPerMeter 4字節 暗示程度分辯率
9.biYPelsPerMeter 4字節 暗示垂直分辯率
10.biCIrUsed 4字節 暗示彩色表中的顏色索引數量
11.biCIrImportant 4字節 暗示有主要影響到顏色索引數量
下圖中暗示彩色表中一個彩色快的布局,別離進行詮釋
1.rgbBlue 1字節 藍色
2.rgbGreen 1字節 綠色
3.rgbRed 1字節 紅色
4.rgbReserved 1字節 保留位0
申明一點:
當位圖為單色位圖的時辰,有2個彩色快
當位圖為4位位圖的餓時辰,有16個彩色快
當位圖為8位位圖的時辰,有256個彩色快
當位圖為24位位圖的時辰,沒有彩色快
第四部門是圖像數據類,一幅圖的數據挨次是從左往右,然后從上往下,(舉個例子2x2,挨次就是0,0 0,1 1,0 1,1 ),然后需要注重一點是windows讀取文件一行字節數必需是4的倍數,所以不敷4字節要補齊,然后就用到了下面圖中的公式,下圖入彀算成果就是一行要用到的字節數,如下圖:
申明一點:
當位圖為單色位圖時,8個像素占一個字節
當位圖為4位位圖時,4個像素占一個字節
當位圖為8位位圖時,1個像素占一個字節
當位圖為24位位圖時,1個像素占三個字節
0 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!