1. BMP的文件部分
圖像文件頭
1)1-2:(這里的數字代表的是位元組,下同)圖像文件頭。=』BM』,表示是Windows支持的BMP格式。(注意:查ascii表B 0x42,M0x4d,bfType 為兩個位元組,B為low位元組,M為high位元組所以bfType=0x4D42,而不是0x424D,請注意)
2)3-6:整個文件大小。4690 0000,為00009046h=36934。
3)7-8:保留,必須設置為0。
4)9-10:保留,必須設置為0。
5)11-14:從文件開始到點陣圖數據之間的偏移量(14+40+4*(2^biBitCount))(在有顏色板的情況下)。4600 0000,為00000046h=70,上面的文件頭就是35字=70位元組。
點陣圖信息頭
6)15-18:點陣圖圖信息頭長度。
7) 19-22:點陣圖寬度,以像素為單位。8000 0000,為00000080h=128。
8)23-26:點陣圖高度,以像素為單位。9000 0000,為00000090h=144。
9)27-28:點陣圖的位面數,該值總是1。0100,為0001h=1。
10)29-30:每個像素的位數。有1(單色),4(16色),8(256色),16(64K色,高彩色),24(16M色,真彩色),32(4096M色,增強型真彩色)。1000為0010h=16。
11)31-34:壓縮說明:有0(不壓縮),1(RLE 8,8位RLE壓縮),2(RLE 4,4位RLE壓縮,3(Bitfields,位域存放)。RLE簡單地說是採用像素數+像素值的方式進行壓縮。T408採用的是位域存放方式,用兩個位元組表示一個像素,位域分配為r5b6g5。圖中0300 0000為00000003h=3(這張圖片不存在顏色板)。
12)35-38:用位元組數表示的點陣圖數據的大小,該數必須是4的倍數,數值上等於:一行所佔的位元組數×點陣圖高度。0090 0000為00009000h=80×90×2h=36864。假設點陣圖是24位,寬為41,高為30,則數值= (biWidth*biBitCount+31)/32*4*biHeight,即=(41*24+31)/32*4*30=3720
13)39-42:用象素/米表示的水平解析度。A00F 0000為0000 0FA0h=4000。
14)43-46:用象素/米表示的垂直解析度。A00F 0000為0000 0FA0h=4000。
15)47-50:點陣圖使用的顏色索引數。設為0的話,則說明使用所有調色板項。
16)51-54:對圖象顯示有重要影響的顏色索引的數目。如果是0,表示都重要。
彩色板
17)(55+0)到(50-1+2^biBitCount):彩色板規范。對於調色板中的每個表項,用下述方法來描述RGB的值:
1位元組用於藍色分量
1位元組用於綠色分量
1位元組用於紅色分量
1位元組用於填充符(設置為0)
對於24-位真彩色圖像就不使用彩色板,因為點陣圖中的RGB值就代表了每個象素的顏色。
如,彩色板為00F8 0000 E007 0000 1F00 0000 0000 0000,其中:
00F8為F800h = 1111 1000 0000 0000(二進制),是藍色分量的掩碼。
E007 為 07E0h = 0000 0111 1110 0000(二進制),是綠色分量的掩碼。
1F00為001Fh = 0000 0000 0001 1111(二進制),是紅色分量的掩碼。
0000 總設置為0。
將掩碼跟像素值進行「與」運算再進行移位操作就可以得到各色分量值。看看掩碼,就可以明白事實上在每個像素值的兩個位元組16位中,按從高到低取5、6、5位分別就是r、g、b分量值。取出分量值後把r、g、b值分別乘以8、4、8就可以補齊第個分量為一個位元組,再把這三個位元組按rgb組合,放入存儲器(同樣要反序),就可以轉換為24位標准BMP格式了。
圖像數據陣列
18)55(無調色板)-bfSize:每兩個位元組表示一個像素。陣列中的第一個位元組表示點陣圖左下角的象素,而最後一個位元組表示點陣圖右上角的象素。
//----圖像處理-----BMP為DIB類型,從底向上顯示---------
//陣列中的第一個位元組表示點陣圖左下角的象素,而最後一個位元組表示點陣圖右上角的象素。
//下面的代碼可以完成第一個位元組表示點陣圖左上角的象素,而最後一個位元組表示點陣圖右下角的象素,即正常的顯示狀態,便於操作。
int m,n;
unsigned char k;
m = BMPPIC.BMPInfoHead.biWidth/8; //24
n = BMPPIC.BMPInfoHead.biHeight; //96, 24*96 = 2304 bytes
for(int i=0; i < n/2; i++ )
{
for(int a=0; a < m; a++ )
{
k = pbufout1[m*(n-i-1) + a];
pbufout1[m*(n-i-1) + a] = pbufout1[i*m + a];
pbufout1[i*m + a] = k;
}
}
存儲演算法
BMP文件通常是不壓縮的,所以它們通常比同一幅圖像的壓縮圖像文件格式要大很多。例如,一個800×600的24位幾乎占據1.4MB空間。因此它們通常不適合在網際網路或者其它低速或者有容量限制的媒介上進行傳輸。根據顏色深度的不同,圖像上的一個像素可以用一個或者多個位元組表示,它由n/8所確定(n是位深度,1位元組包含8個數據位)。圖片瀏覽器等基於位元組的ASCII值計算像素的顏色,然後從調色板中讀出相應的值。更為詳細的信息請參閱下面關於點陣圖文件的部分。n位2n種顏色的點陣圖近似位元組數可以用下面的公式計算:BMP文件大小約等於 54+4*2的n次方+(w*h*n)/8,其中高度和寬度都是像素數。需要注意的是上面公式中的54是點陣圖文件的文件頭,是彩色調色板的大小。另外需要注意的是這是一個近似值,對於n位的點陣圖圖像來說,盡管可能有最多2n中顏色,一個特定的圖像可能並不會使用這些所有的顏色。由於彩色調色板僅僅定義了圖像所用的顏色,所以實際的彩色調色板將小於。如果想知道這些值是如何得到的,請參考下面文件格式的部分。由於存儲演算法本身決定的因素,根據幾個圖像參數的不同計算出的大小與實際的文件大小將會有一些細小的差別。
數據類型
Oracle產品 EPC Bitmap 中數據類型 EPC bitmap的縮寫。
Oracle提出了一種EPC bitmap的數據類型對基於RFID產品項級別跟蹤應用產生的大量的數據進行有效處理,。
EPC bitmap數據類型定義一個EPC集合,集合共享EPC的一些特徵(例如header,manager number,and object class)。支持這個數據類型的關鍵是使用RFID標識的物品項,在一個群組里可以基於共同屬性(例如位置,截止日期,或製造商),在通常情況下可以被追蹤。而EPC集合可以表示為一個EPC bitmap,bitmap可以被訪問並可通過epc2bmp或bmp2epc進行數據類型的轉換操作。
引入EPC bitmap(epc bmp)類型的好處:
(1)可以簡單的標識一個RFID EPC集合,而不會丟失任何信息;
(2)對於同類的EPC操作可以簡單的在bitmap上操作,簡化了操作方式
br/
2. BMP的對應數據結構
1:BMP文件組成
BMP文件由文件頭、點陣圖信息頭、顏色信息和圖形數據四部分組成。
2:BMP文件頭(14位元組)
BMP文件頭數據結構含有BMP文件的類型、文件大小和點陣圖起始位置等信息。
其結構定義如下: {WORDbfType;//點陣圖文件的類型,必須為BM(1-2位元組)DWORDbfSize;//點陣圖文件的大小,以位元組為單位(3-6位元組,低位在前)WORDbfReserved1;//點陣圖文件保留字,必須為0(7-8位元組)WORDbfReserved2;//點陣圖文件保留字,必須為0(9-10位元組)DWORDbfOffBits;//點陣圖數據的起始位置,以相對於點陣圖(11-14位元組,低位在前)//文件頭的偏移量表示,以位元組為單位}BITMAPFILEHEADER;3:點陣圖信息頭(40位元組)
BMP點陣圖信息頭數據用於說明點陣圖的尺寸等信息。 {DWORDbiSize;//本結構所佔用位元組數(15-18位元組)LONGbiWidth;//點陣圖的寬度,以像素為單位(19-22位元組)LONGbiHeight;//點陣圖的高度,以像素為單位(23-26位元組)WORDbiPlanes;//目標設備的級別,必須為1(27-28位元組)WORDbiBitCount;//每個像素所需的位數,必須是1(雙色),(29-30位元組)//4(16色),8(256色)16(高彩色)或24(真彩色)之一DWORDbiCompression;//點陣圖壓縮類型,必須是0(不壓縮),(31-34位元組)//1(BI_RLE8壓縮類型)或2(BI_RLE4壓縮類型)之一DWORDbiSizeImage;//點陣圖的大小(其中包含了為了補齊行數是4的倍數而添加的空位元組),以塵源位元組為單位(35-38位元組)LONGbiXPelsPerMeter;//點陣圖水平解析度,每米像素數(39-42位元組)LONGbiYPelsPerMeter;//點陣圖垂直解析度,每米像素數(43-46位元組)DWORDbiClrUsed;//點陣圖實際使用的顏色表中的顏色數(47-50位元組)DWORDbiClrImportant;//點陣圖顯示過程中重要的顏色數(51-54位元組)}BITMAPINFOHEADER;4:顏色表
顏色表用於說明點陣圖中的顏色,它有若干個表項,每一個表項是一個RGBQUAD類型的岩兄首結構,定義一種顏色。RGBQUAD結構的定義如下: typedefstructtagRGBQUAD{BYTErgbBlue;//藍色的亮度(值范圍為0-255)BYTErgbGreen;//綠色的亮度(值范圍為0-255)BYTErgbRed;//紅色的亮度(值范圍為0-255)BYTErgbReserved;//保留,必須為0}RGBQUAD;顏色表中RGBQUAD結構數據的個數有biBitCount來確定:
當biBitCount=1,4,8時,分別有2,16,256個表項;
當biBitCount=24時,沒有顏色表項。
點陣圖信息頭和顏色表組成點陣圖信息,BITMAPINFO結構定義如下: typedefstructtagBITMAPINFO{BITMAPINFOHEADERbmiHeader;//點陣圖信息頭RGBQUADbmiColors[1];//顏色表}BITMAPINFO;5:點陣圖數據
點陣圖數據記錄了點陣圖的每一個像素值,記錄順序是在掃描行內是從左到右,掃描行之間是從下到上。點陣圖的一個像素值所佔的位元組數:
當biBitCount=1時,8個像素佔1個位元組;
當biBitCount=4時,2個像素粗數佔1個位元組;
當biBitCount=8時,1個像素佔1個位元組;
當biBitCount=24時,1個像素佔3個位元組,按順序分別為B,G,R;
Windows規定一個掃描行所佔的位元組數必須是
4的倍數(即以long為單位),不足的以0填充,
biSizeImage = ((((bi.biWidth * bi.biBitCount) + 31) & ~31) / 8) * bi.biHeight;
具體數據舉例:
如某BMP文件開頭:
424D 46900000 0000 0000 4600 0000 2800 0000 8000 0000 9000 0000 0100*1000 0300 0000 0090 0000 A00F 0000 A00F0000 0000 00000000 0000*00F8 E007 1F00 0000*02F1 84F1 04F1 84F1 84F1 06F2 84F1 06F2 04F2 86F2 06F2 86F2 86F2 .... ....
3. bmp 文件 前 62位元組 是什麼
http://hi..com/sakurac/blog/item/611dedaf61f664c87cd92a3f.html 在vc下讀取的時候跟讀普通二進制文件是一樣的。前14個字清磨節的文件頭,然後是40個位元組的點陣圖信息頭。如果有調色板的話,在點陣圖信息答老斗頭含雀後面是調色板。再往後就是圖像數據
4. 一幅640X480的256色圖像文件的大小急
Windows的BMP點陣圖格式占據308278位元組。
點陣圖就是每個點一個顏色代碼,然後這些代碼排列出來而已。每個代碼就表示相應點的顏色。256色表示2的8次方種顏色,因為2的8次方=256,故,以01組合的代碼需要8位就可以表示任意的256種顏色之一,比如01000101代表一種顏色,01000110代表另一種顏色。
因為一個存儲位元組就是8位二進制代碼,所以一個點的信息(也就是顏色代碼)正好就是運晌岩一個位元組。
640×480解析度的圖片,點的數量有640×480=307200個,每個點的顏色是一個位元組,合計就是307200個位元組。
BMP文件頭占據1078個位元組(文件頭表示這個文件是BMP文件等一些信息旁御,這個大小隻要是Windows的BMP格式文檔,大小都一樣,你用800×600的文件,這個大小也是1078個位元組)
所以,640×480256色的BMP文檔是640×480+1078=308278位元組同理:800×600256色的BMP文檔是800×600+1078=481078位元組
(4)bmp二進制文件頭信息多少位擴展閱讀:
典型的BMP圖像文件謹納由四部分組成:
1:點陣圖頭文件數據結構,它包含BMP圖像文件的類型、顯示內容等信息;
2:點陣圖信息數據結構,它包含有BMP圖像的寬、高、壓縮方法,以及定義顏色等信息;
3:調色板,這個部分是可選的,有些點陣圖需要調色板,有些點陣圖,比如真彩色圖(24位的BMP)就不需要調色板;
4:點陣圖數據,這部分的內容根據BMP點陣圖使用的位數不同而不同,在24點陣圖中直接使用RGB,而其他的小於24位的使用調色板中顏色索引值。
參考資料:網路——BM
5. BMP格式文件的數據結構
BMP是一種與硬體設備無關的圖像文件格式,其支持1,4,8,16,24,32位的圖像存儲,並且支持非壓縮和壓縮這兩種存儲方式,數據是以Little Endian依次存儲。由於歷史的原因,存在Windows和OS/2兩種類型的BMP,目前Windows類型的BMP基本上可是說是事實上的標准,下面均以此類型BMP文件為例,其文件主要由以下3部分組成: (1)文件頭和信息頭 typedef struct _tag_BMP_FILEHEADER{ WORD bfType; //2Bytes,必須為"BM",即0x424D DWORD bfSize; //4Bytes,整個BMP文件的大小 WORD bfReserved1; //2Bytes,保留字,可設為0 WORD bfReserved2; //2Bytes,保留字,可設為0 DWORD bfOffBits; //4Bytes,文件起始位置到圖像像素數據的偏移 } BMP_FILEHEADER; typedef struct _tagBMP_INFOHEADER{ DWORD biSize; //4Bytes,INFOHEADER結構體大小,存在其他版本INFOHEADER,用作區分 LONG biWidth; //4Bytes,圖像寬度(以像素為單位) LONG biHeight; //4Bytes,圖像高度,+:圖像存儲順序為Bottom2Top,-:Top2Bottom WORD biPlanes; //2Bytes,圖像數據平面,BMP存儲RGB數據,因此總為1 WORD biBitCount; //2Bytes,圖像像素位數 DWORD biCompression; //4Bytes,0:不壓縮,1:RLE8,2:RLE4 DWORD biSizeImage; //4Bytes,4位元組對齊的圖像數據大小 LONG biXPelsPerMeter; //4 Bytes,用象素/米表示的水平解析度 LONG biYPelsPerMeter; //4 Bytes,用象素/米表示的垂直解析度 DWORD biClrUsed; //4 Bytes,實際使用的調色板索引數,0:使用所有的調色板索引 DWORD biClrImportant; //4 Bytes,重要的調色板索引數,0:所有的調色板索引都重要 } BMP_INFOHEADER; (2)調色板數據(可選) 1,4,8點陣圖像會使用調色板數據,其它不需要調色板數據,即調色板最多隻需要256項(索引0 - 255),調色板數據通常採用如下數據結構: typedef struct _tagRGBQUAD { BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD; (3)圖像像素數據; 採用四位元組對齊存放的方式。
6. bmp格式的圖片的最大尺寸(解析度)是多少
吃我一記洛陽鏟~
BMP的文件中,文件頭寫明了BMP的大小,用的是DWORD記錄大小,即unsigned
long類型,4位元組32位,故最大是2^32bit=4GB。
而這4GB中,前14位元組是文件頭信息,加上40個圖片頭信息,共54位元組。
後面是調色板信息,這個可以是0可以是很多個,有興趣的自己去查查,反正我們取最小是0。
7. bmp點陣圖的文件頭大小固定,通常是40位元組
文件改核攜大氏此小是固定的。
bmp圖片尺寸不變,文件大小是固定的,與圖片內容無關。
換句話說同樣尺寸的白板畫與風景核伏畫保存為bmp格式,大小都一樣。
8. 關於bmp格式的文件中的文件頭
BMP是一種與硬體設備無關的圖像文件格式,使用非常廣。它採用位映射存儲格式,除了圖像深度可選以外,不採用其他任何壓縮,因此,BblP文件所佔用的空間很大。BMP文件的圖像深度可選lbit、4bit、8bit及24bit。BMP文件存儲數據時,圖像的掃描方式是按從左到右、從下到上的順序。
由於BMP文件格式是Windows環境中交換與圖有關的數據的一種標准,因此在Windows環境中運行的圖形圖像軟體都支持BMP圖像格式。
典型的BMP圖像文件由三部分組成:點陣圖文件頭數據結構,它包含BMP圖像文件的類型、顯示內容等信息;點陣圖信息數據結構,它包含有BMP圖像的寬、高、壓縮方法,以及定義顏色等信息。
JPEG是Joint Photographic Experts Group(聯合圖像專家組)的縮寫,文件後輟名為".jpg"或".jpeg",是最常用的圖像文件格式,由一個軟體開發聯合會組織制定,是一種有損壓縮格式,能夠將圖像壓縮在很小的儲存空間,圖像中重復或不重要的資料會被丟失,因此容易造成圖像數據的損傷。尤其是使用過高的壓縮比例,將使最終解壓縮後恢復的圖像質量明顯降低,如果追求高品質圖像,不宜採用過高壓縮比例。但是JPEG壓縮技術十分先進,它用有損壓縮方式去除冗餘的圖像數據,在獲得極高的壓縮率的同時能展現十分豐富生動的圖像,換句話說,就是可以用最少的磁碟空間得到較好的圖像品質。而且 JPEG是一種很靈活的格式,具有調節圖像質量的功能,允許用不同的壓縮比例對文件進行壓縮,支持多種壓縮級別,壓縮比率通常在10:1到40:1之間,壓縮比越大,品質就越低;相反地,壓縮比越小,品質就越好。比如可以把1.37Mb的BMP點陣圖文件壓縮至20.3KB。當然也可以在圖像質量和文件尺寸之間找到平衡點。JPEG格式壓縮的主要是高頻信息,對色彩的信息保留較好,適合應用於互聯網,可減少圖像的傳輸時間,可以支持24bit真彩色,也普遍應用於需要連續色調的圖像。
JPEG格式是目前網路上最流行的圖像格式,是可以把文件壓縮到最小的格式,在 Photoshop軟體中以JPEG格式儲存時,提供11級壓縮級別,以0—10級表示。其中0級壓縮比最高,圖像品質最差。即使採用細節幾乎無損的10 級質量保存時,壓縮比也可達 5:1。以BMP格式保存時得到4.28MB圖像文件,在採用JPG格式保存時,其文件僅為178KB,壓縮比達到24:1。經過多次比較,採用第8級壓縮為存儲空間與圖像質量兼得的最佳比例。
JPEG格式的應用非常廣泛,特別是在網路和光碟讀物上,都能找到它的身影。目前各類瀏覽器均支持JPEG這種圖像格式,因為JPEG格式的文件尺寸較小,下載速度快。
JPEG2000作為JPEG的升級版,其壓縮率比JPEG高約30%左右,同時支持有損和無損壓縮。JPEG2000格式有一個極其重要的特徵在於它能實現漸進傳輸,即先傳輸圖像的輪廓,然後逐步傳輸數據,不斷提高圖像質量,讓圖像由朦朧到清晰顯示。此外,JPEG2000還支持所謂的"感興趣區域" 特性,可以任意指定影像上感興趣區域的壓縮質量,還可以選擇指定的部分先解壓縮。
JPEG2000和JPEG相比優勢明顯,且向下兼容,因此可取代傳統的JPEG格式。JPEG2000即可應用於傳統的JPEG市場,如掃描儀、數碼相機等,又可應用於新興領域,如網路傳輸、無線通訊等等。
9. BMP 文件格式
BMP 取自 Bitmap 的縮寫。BMP 文件格式,也被稱為點陣圖圖像文件或設備無關點陣圖(DIB, device independent bitmap)的文件格式或簡稱為點陣圖(bitmap),是一個用於存儲點陣圖數字圖像的文件格式,獨立於的顯示裝置,尤其是在 Microsoft Windows 和 OS/2 操作系統上。文件擴展名為.bmp, Windows GDI API 內部使用的 DIB 數據結構(.dib)與 BMP 文件格式幾乎相同。
BMP 文件格式能夠存儲各種顏色深度的單色和彩色二維數字圖像,並且可以選擇存儲數據壓縮,alpha 通道和顏色配置文件。在 Windows Metafile(WMF) 規范中涵蓋了 BMP 格式的文件。
點陣圖圖像文件由固定大小的結構(文件頭)以及以預定順序出現的可變大小的結構體組成。由於該文件格式幾經演進,這些結構體的版本也很多。
參考上圖,點陣圖文件由以下結構依次構成:
這部分數據塊位於文件開頭,共 14 位元組,用於進行文件的識別。典型的應用程序會首先普通讀取這部分數據以確保的確是點陣圖文件並且沒有損壞。所有的整數值都以小端序(little-endian)存放(即最低有效位前置)。
這部分告訴應用程序圖像的詳細信息,在屏幕上顯示圖像將會使用這些信息,它從文件的第15個位元組開始。
這部分數據塊對應了Windows和OS/2中的內部使用的頭結構以及其它一些版本的變體。但所有版本均以一個DWORD位(32位)開始,用以說明該數據塊的大小,使得應用程序能夠根據這個大小來區分該圖像實際使用了哪種版本的DIB頭結構。
存在多種版本的頭結構的原因是微軟對DIB格式進行過多次擴展。下表即為所有不同版本的DIB頭:
BITMAPCOREHEADER之後的版本都只是在前一版本結構末尾追加欄位。
下面我們對比較常見的兩個版本進行說明
DIB 頭從地址 0x0E 開始,下面列出 BITMAPCOREHEADER 版本的 DIB 頭。除非有特殊說明,其中所有值均為無符號整數。
注意:
出於兼容性的考量,大多數應用程序使用較舊版本的DIB頭保存文件。由於 Windows 2000 之後不再支持 OS/2, 因此目前常見的Windows格式是 BITMAPINFOHEADER 標頭。下表對其進行說明,除非有特殊說明,其中所有值均為無符號整數。
壓縮方法(位元組 0x1E ~ 0x21)的有效值如下表所示:
注意:BI_JPEG和BI_PNG僅對列印機驅動有效,不支持屏幕渲染。
此項僅在DIB頭是BITMAPINFOHEADER且Compression Method成員設置為BI_BITFIELDS或BI_ALPHABITFIELDS的情況下存在。
見本文的最後部分
這部分定義了圖像中所用的顏色。如上所述,點陣圖圖像一個像素接著一個像素儲存,每個像素使用一個或者多個位元組的值表示,所以調色板的目的就是要告訴應用程序這些值所對應的實際顏色。
調色板的條目數為 (n為 DIB 頭中指定的的每個像素所佔位數) 或 DIB 頭中指定的調色板的顏色數。
典型的點陣圖文件使用RGB彩色模型。大多數情況下,調色板的每個條目占 4 個位元組,按順序表示 藍色、綠色、紅色、0x00。每個條目的格式如下:
其中,第四個位元組一般沒有使用(大多數應用程序將它設為0),也有些應用程序將第四個位元組作為 alfa 通道使用。
調色板是一個位元組塊(一個表),列出了圖像使用的顏色。對於索引型的點陣圖(每個像素所佔位數為1、4 或 8),調色板的作用是告訴應用程序,像素的實際顏色,此時,像素點存儲的值為此調色板中此像素顏色的索引,根據索引得到像素點真實的顏色。對於非索引型的點陣圖,調色板的作用是列出點陣圖中使用的顏色,以優化具有有限顏色顯示功能的設備,並便於將來轉換為不同的像素格式和著色。
如上所述,當像素採用每像素16位或更高時,通常不使用調色板。
點陣圖中的像素是以行為單位進行存儲的,每一行再存儲時都以 4 位元組對齊,即每一行的大小都向上取整為 4 位元組(32 位 DWORD)的倍數。如果圖像的高度大於 1, 多個經過填充實現對齊的行就形成了像素數組。
所以存儲一行像素所需的位元組數,可以通過以下公式計算:
RowSize單位為位元組,ImageWidth單位為像素;注意公式中的特殊括弧,表示向上、向下取整
像素陣列是一個32位DWORD塊,它逐像素描述圖像,每個像素使用 1 個或多個自己表示。
通常,像素是從下到上、從左到右保存的。但如果使用的不是 BITMAPCOREHEADER, 那麼未壓縮的 Windows 點陣圖還可以從上到下存儲,此時圖像高度為負值。
每一行的末尾通過填充若干個位元組的數據(並不一定為0)使該行的長度為4位元組的倍數。像素數組讀入內存後,每一行的起始地址必須為4的倍數。這個限制僅針對內存中的像素數組,針對存儲時,僅要求每一行的大小為4位元組的倍數,對文件的偏移地址沒有限制。
例如:對於24位色的點陣圖,如果它的寬度為1像素,那麼除了每一行的數據(藍、綠、紅)需要佔3位元組外,還會填充1位元組;而如果寬為2像素,則需要2位元組的填充;寬為3像素時,需要3位元組填充;寬為4像素時則不需要填充。
此處的單位 bbp 為 (bit/pixel), 位每像素
為了解決哪些位定義了哪些樣本的歧義,DIB標頭提供了某些默認值以及特定的BITFIELDS,它們是位掩碼,用於定義像素中特定位組到特定通道的成員資格。下圖定義了此機制:
BITFIELDS位掩碼定義的樣本欄位必須是連續且不重疊的,但是樣本欄位的順序是任意的。最普遍的場序是:Alpha,Blue,Green,Red(MSB到LSB)。僅當DIB標頭的Compression成員設置為BI_BITFIELDS時,紅色,綠色和藍色位掩碼才有效。只要在DIB標頭中存在或將DIB標頭的Compression成員設置為BI_ALPHABITFIELDS [5](僅Windows CE),alpha位掩碼就有效。
使用畫圖軟體繪制圖像為 bmp 格式,下面是一些例子:
這後面有一個很小的BMP單色圖 [圖片上傳失敗...(image-fd91f4-1572484665335)]
放大後顯示為:
其文件內容為(全部以16進製表示):
對其進行解析:
這後面有一個很小的 BMP 16色圖 [圖片上傳失敗...(image-887bb6-1572484665335)]
放大後顯示為:
其文件內容為(全部以16進製表示):
對其進行解析:
這後面有一個很小的 BMP 256色圖 [圖片上傳失敗...(image-78d072-1572484665335)]
放大後顯示為:
其文件內容為(全部以16進製表示):
10. 一個具有24色.300X200大小的BMP圖片大小為多少位元組
24位色:文件頭(14位元組)+信息頭(40位元組)+Height(圖像高度咐爛)*(Width+4-Width%4)*3 (由於每個像素由三個位元組表示)
就是14Byte + 40Byte + 200 * (300 + 4 - 300 mod 4) * 3
計算下來是182454Byte(字顫睜節)
這個是精確演算法
有簡便演算法 但是不精確 就不介紹了茄簡歲