青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-4  評論-40  文章-117  trackbacks-0

 

BMP是英文Bitmap(位圖)的簡寫,它是Windows操作系統中的標準圖像文件格式,能夠被多種Windows應用程序所支持。隨著Windows操作系統的流行與豐富的Windows應用程序的開發,BMP位圖格式理所當然地被廣泛應用。這種格式的特點是包含的圖像信息較豐富,幾乎不進行壓縮,但由此導致了它與生俱生來的缺點--占用磁盤空間過大。所以,目前BMP在單機上比較流行。
  BMP文件格式分析
  簡介
  BMP(Bitmap-File)圖形文件是Windows采用的圖形文件格式,在Windows環境下運行的所有圖象處理軟件都支持BMP圖象文件格式。Windows系統內部各圖像繪制操作都是以BMP為基礎的。Windows 3.0以前的BMP圖文件格式與顯示設備有關,因此把這種BMP圖象文件格式稱為設備相關位圖DDB(device-dependent bitmap)文件格式。Windows 3.0以后的BMP圖象文件與顯示設備無關,因此把這種BMP圖象文件格式稱為設備無關位圖DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系統中仍然存在DDB位圖,象BitBlt()這種函數就是基于DDB位圖的,只不過如果你想將圖像以BMP格式保存到磁盤文件中時,微軟極力推薦你以DIB格式保存),目的是為了讓Windows能夠在任何類型的顯示設備上顯示所存儲的圖象。BMP位圖文件默認的文件擴展名是BMP或者bmp(有時它也會以.DIB或.RLE作擴展名)。
  6.1.2 文件結構
  位圖文件可看成由4個部分組成:位圖文件頭(bitmap-file header)、位圖信息頭(bitmap-information header)、彩色表(color table)和定義位圖的字節陣列,它具有如下所示的形式。
  位圖文件的組成
  結構名稱
  符號
  位圖文件頭(bitmap-file header) BITMAPFILEHEADER bmfh
  位圖信息頭(bitmap-information header) BITMAPINFOHEADER bmih
  彩色表(color table) RGBQUAD aColors[]
  圖象數據陣列字節 BYTE aBitmapBits[]
  位圖文件結構可綜合在表6-01中。
  表01 位圖文件結構內容摘要
  偏移量
  域的名稱
  大小
  內容
  圖象文件
  頭
  0000h 文件標識 2 bytes 兩字節的內容用來識別位圖的類型:
  ‘BM’ : Windows 3.1x, 95, NT, …
  ‘BA’ :OS/2 Bitmap Array
  ‘CI’ :OS/2 Color Icon
  ‘CP’ :OS/2 Color Pointer
  ‘IC’ : OS/2 Icon
  ‘PT’ :OS/2 Pointer
  注:因為OS/2系統并沒有被普及開,所以在編程時,你只需判斷第一個標識“BM”就行。
  0002h File Size 1 dword 用字節表示的整個文件的大小
  0006h Reserved 1 dword 保留,必須設置為0
  000Ah Bitmap Data Offset 1 dword 從文件開始到位圖數據開始之間的數據(bitmap data)之間的偏移量
  000Eh Bitmap Header Size 1 dword 位圖信息頭(Bitmap Info Header)的長度,用來描述位圖的顏色、壓縮方法等。下面的長度表示:
  28h - Windows 3.1x, 95, NT, …
  0Ch - OS/2 1.x
  F0h - OS/2 2.x
  注:在Windows95、98、2000等操作系統中,位圖信息頭的長度并不一定是28h,因為微軟已經制定出了新的BMP文件格式,其中的信息頭結構變化比較大,長度加長。所以最好不要直接使用常數28h,而是應該從具體的文件中讀取這個值。這樣才能確保程序的兼容性。
  0012h Width 1 dword 位圖的寬度,以象素為單位
  0016h Height 1 dword 位圖的高度,以象素為單位
  001Ah Planes 1 word 位圖的位面數(注:該值將總是1)
  圖象
  信息
  頭
  001Ch Bits Per Pixel 1 word 每個象素的位數
  1 - 單色位圖(實際上可有兩種顏色,缺省情況下是黑色和白色。你可以自己定義這兩種顏色)
  4 - 16 色位圖
  8 - 256 色位圖
  16 - 16bit 高彩色位圖
  24 - 24bit 真彩色位圖
  32 - 32bit 增強型真彩色位圖
  001Eh Compression 1 dword 壓縮說明:
  0 - 不壓縮 (使用BI_RGB表示)
  1 - RLE 8-使用8位RLE壓縮方式(用BI_RLE8表示)
  2 - RLE 4-使用4位RLE壓縮方式(用BI_RLE4表示)
  3 - Bitfields-位域存放方式(用BI_BITFIELDS表示)
  0022h Bitmap Data Size 1 dword 用字節數表示的位圖數據的大小。該數必須是4的倍數
  0026h HResolution 1 dword 用象素/米表示的水平分辨率
  002Ah VResolution 1 dword 用象素/米表示的垂直分辨率
  002Eh Colors 1 dword 位圖使用的顏色數。如8-比特/象素表示為100h或者 256.
  0032h Important Colors 1 dword 指定重要的顏色數。當該域的值等于顏色數時(或者等于0時),表示所有顏色都一樣重要
  調色板數據 根據BMP版本的不同而不同 Palette N * 4 byte 調色板規范。對于調色板中的每個表項,這4個字節用下述方法來描述RGB的值: 1字節用于藍色分量
  1字節用于綠色分量
  1字節用于紅色分量
  1字節用于填充符(設置為0)
  圖象數據 根據BMP版本及調色板尺寸的不同而不同 Bitmap Data xxx bytes 該域的大小取決于壓縮方法及圖像的尺寸和圖像的位深度,它包含所有的位圖數據字節,這些數據可能是彩色調色板的索引號,也可能是實際的RGB值,這將根據圖像信息頭中的位深度值來決定。
  構件詳解
  1. 位圖文件頭
  位圖文件頭包含有關于文件類型、文件大小、存放位置等信息,在Windows 3.0以上版本的位圖文件中用BITMAPFILEHEADER結構來定義:
  typedef struct tagBITMAPFILEHEADER { /* bmfh */
  UINT bfType;
  DWORD bfSize;
  UINT bfReserved1;
  UINT bfReserved2;
  DWORD bfOffBits;
  } BITMAPFILEHEADER;
  其中:
  bfType
  說明文件的類型.(該值必需是0x4D42,也就是字符'BM'。我們不需要判斷OS/2的位圖標識,這么做現在來看似乎已經沒有什么意義了,而且如果要支持OS/2的位圖,程序將變得很繁瑣。所以,在此只建議你檢察'BM'標識)
  bfSize
  說明文件的大小,用字節為單位
  bfReserved1
  保留,必須設置為0
  bfReserved2
  保留,必須設置為0
  bfOffBits
  說明從文件頭開始到實際的圖象數據之間的字節的偏移量。這個參數是非常有用的,因為位圖信息頭和調色板的長度會根據不同情況而變化,所以你可以用這個偏移值迅速的從文件中讀取到位數據。
  2. 位圖信息頭
  位圖信息用BITMAPINFO結構來定義,它由位圖信息頭(bitmap-information header)和彩色表(color table)組成,前者用BITMAPINFOHEADER結構定義,后者用RGBQUAD結構定義。BITMAPINFO結構具有如下形式:
  typedef struct tagBITMAPINFO { /* bmi */
  BITMAPINFOHEADER bmiHeader;
  RGBQUAD bmiColors[1];
  } BITMAPINFO;
  其中:
  bmiHeader
  說明BITMAPINFOHEADER結構,其中包含了有關位圖的尺寸及位格式等信息
  bmiColors
  說明彩色表RGBQUAD結構的陣列,其中包含索引圖像的真實RGB值。
  BITMAPINFOHEADER結構包含有位圖文件的大小、壓縮類型和顏色格式,其結構定義為:
  typedef struct tagBITMAPINFOHEADER { /* bmih */
  DWORD biSize;
  LONG biWidth;
  LONG biHeight;
  WORD biPlanes;
  WORD biBitCount;
  DWORD biCompression;
  DWORD biSizeImage;
  LONG biXPelsPerMeter;
  LONG biYPelsPerMeter;
  DWORD biClrUsed;
  DWORD biClrImportant;
  } BITMAPINFOHEADER;
  其中:
  biSize
  說明BITMAPINFOHEADER結構所需要的字數。注:這個值并不一定是BITMAPINFOHEADER結構的尺寸,它也可能是sizeof(BITMAPV4HEADER)的值,或是sizeof(BITMAPV5HEADER)的值。這要根據該位圖文件的格式版本來決定,不過,就現在的情況來看,絕大多數的BMP圖像都是BITMAPINFOHEADER結構的(可能是后兩者太新的緣故吧:-)。
  biWidth
  說明圖象的寬度,以象素為單位
  biHeight
  說明圖象的高度,以象素為單位。注:這個值除了用于描述圖像的高度之外,它還有另一個用處,就是指明該圖像是倒向的位圖,還是正向的位圖。如果該值是一個正數,說明圖像是倒向的,如果該值是一個負數,則說明圖像是正向的。大多數的BMP文件都是倒向的位圖,也就是時,高度值是一個正數。(注:當高度值是一個負數時(正向圖像),圖像將不能被壓縮(也就是說biCompression成員將不能是BI_RLE8或BI_RLE4)。
  biPlanes
  為目標設備說明位面數,其值將總是被設為1
  biBitCount
  說明比特數/象素,其值為1、4、8、16、24、或32
  biCompression
  說明圖象數據壓縮的類型。其值可以是下述值之一:
  BI_RGB:沒有壓縮;
  BI_RLE8:每個象素8比特的RLE壓縮編碼,壓縮格式由2字節組成(重復象素計數和顏色索引);
  BI_RLE4:每個象素4比特的RLE壓縮編碼,壓縮格式由2字節組成
  BI_BITFIELDS:每個象素的比特由指定的掩碼決定。
  biSizeImage
  說明圖象的大小,以字節為單位。當用BI_RGB格式時,可設置為0
  biXPelsPerMeter
  說明水平分辨率,用象素/米表示
  biYPelsPerMeter
  說明垂直分辨率,用象素/米表示
  biClrUsed
  說明位圖實際使用的彩色表中的顏色索引數(設為0的話,則說明使用所有調色板項)
  biClrImportant
  說明對圖象顯示有重要影響的顏色索引的數目,如果是0,表示都重要。
  現就BITMAPINFOHEADER結構作如下說明:
  (1) 彩色表的定位
  應用程序可使用存儲在biSize成員中的信息來查找在BITMAPINFO結構中的彩色表,如下所示:
  pColor = ((LPSTR) pBitmapInfo + (WORD) (pBitmapInfo->bmiHeader.biSize))
  (2) biBitCount
  biBitCount=1 表示位圖最多有兩種顏色,缺省情況下是黑色和白色,你也可以自己定義這兩種顏色。圖像信息頭裝調色板中將有兩個調色板項,稱為索引0和索引1。圖象數據陣列中的每一位表示一個象素。如果一個位是0,顯示時就使用索引0的RGB值,如果位是1,則使用索引1的RGB值。
  biBitCount=4 表示位圖最多有16種顏色。每個象素用4位表示,并用這4位作為彩色表的表項來查找該象素的顏色。例如,如果位圖中的第一個字節為0x1F,它表示有兩個象素,第一象素的顏色就在彩色表的第2表項中查找,而第二個象素的顏色就在彩色表的第16表項中查找。此時,調色板中缺省情況下會有16個RGB項。對應于索引0到索引15。
  biBitCount=8 表示位圖最多有256種顏色。每個象素用8位表示,并用這8位作為彩色表的表項來查找該象素的顏色。例如,如果位圖中的第一個字節為0x1F,這個象素的顏色就在彩色表的第32表項中查找。此時,缺省情況下,調色板中會有256個RGB項,對應于索引0到索引255。
  biBitCount=16 表示位圖最多有65536種顏色。每個色素用16位(2個字節)表示。這種格式叫作高彩色,或叫增強型16位色,或64K色。它的情況比較復雜,當biCompression成員的值是BI_RGB時,它沒有調色板。16位中,最低的5位表示藍色分量,中間的5位表示綠色分量,高的5位表示紅色分量,一共占用了15位,最高的一位保留,設為0。這種格式也被稱作555 16位位圖。如果biCompression成員的值是BI_BITFIELDS,那么情況就復雜了,首先是原來調色板的位置被三個DWORD變量占據,稱為紅、綠、藍掩碼。分別用于描述紅、綠、藍分量在16位中所占的位置。在Windows 95(或98)中,系統可接受兩種格式的位域:555和565,在555格式下,紅、綠、藍的掩碼分別是:0x7C00、0x03E0、0x001F,而在565格式下,它們則分別為:0xF800、0x07E0、0x001F。你在讀取一個像素之后,可以分別用掩碼“與”上像素值,從而提取出想要的顏色分量(當然還要再經過適當的左右移操作)。在NT系統中,則沒有格式限制,只不過要求掩碼之間不能有重疊。(注:這種格式的圖像使用起來是比較麻煩的,不過因為它的顯示效果接近于真彩,而圖像數據又比真彩圖像小的多,所以,它更多的被用于游戲軟件)。
  biBitCount=24 表示位圖最多有1670萬種顏色。這種位圖沒有調色板(bmiColors成員尺寸為0),在位數組中,每3個字節代表一個象素,分別對應于顏色R、G、B。
  biBitCount=32 表示位圖最多有232種顏色。這種位圖的結構與16位位圖結構非常類似,當biCompression成員的值是BI_RGB時,它也沒有調色板,32位中有24位用于存放RGB值,順序是:最高位—保留,紅8位、綠8位、藍8位。這種格式也被成為888 32位圖。如果 biCompression成員的值是BI_BITFIELDS時,原來調色板的位置將被三個DWORD變量占據,成為紅、綠、藍掩碼,分別用于描述紅、綠、藍分量在32位中所占的位置。在Windows 95(or 98)中,系統只接受888格式,也就是說三個掩碼的值將只能是:0xFF0000、0xFF00、0xFF。而在NT系統中,你只要注意使掩碼之間不產生重疊就行。(注:這種圖像格式比較規整,因為它是DWORD對齊的,所以在內存中進行圖像處理時可進行匯編級的代碼優化(簡單))。


posted on 2009-10-30 17:31 李陽 閱讀(1011) 評論(0)  編輯 收藏 引用 所屬分類: 圖形圖像
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩午夜一区| 亚洲自拍偷拍色片视频| 亚洲三级毛片| 久久天天躁狠狠躁夜夜av| 一本久久综合亚洲鲁鲁| 欧美成人a∨高清免费观看| 国产欧美一区视频| 亚洲一区二区三区精品视频| 亚洲欧洲在线看| 久久精品久久99精品久久| 国产日韩精品视频一区| 久久福利影视| 久久精品国产v日韩v亚洲| 国产亚洲欧洲| 久久综合久色欧美综合狠狠| 久久gogo国模裸体人体| 黑人中文字幕一区二区三区| 久久国产直播| 久久久久久亚洲精品杨幂换脸 | 韩国一区电影| 久久人人97超碰国产公开结果| 先锋影音久久| 狠狠色综合一区二区| 免费永久网站黄欧美| 美女成人午夜| av不卡在线看| 亚洲视频视频在线| 国产视频在线观看一区| 久久婷婷一区| 欧美精品一区二区三区在线播放 | 国产亚洲激情| 免费一级欧美片在线播放| 看欧美日韩国产| 一本一本大道香蕉久在线精品| 一区二区电影免费在线观看| 国产精品免费看久久久香蕉| 久久久久久91香蕉国产| 牛夜精品久久久久久久99黑人| 亚洲人线精品午夜| 在线一区视频| 精品不卡视频| 日韩网站在线看片你懂的| 国产精品一区=区| 蜜桃精品久久久久久久免费影院| 欧美国产精品| 久久av一区二区三区亚洲| 蜜臀va亚洲va欧美va天堂| 正在播放欧美视频| 久久久免费观看视频| 一本色道久久加勒比精品| 欧美亚洲日本国产| 99精品国产在热久久下载| 久久成人免费视频| 亚洲天堂视频在线观看| 久久先锋资源| 欧美一区二区三区免费大片| 欧美91大片| 久久亚洲国产精品一区二区| 欧美性猛交xxxx乱大交蜜桃 | 日韩午夜高潮| 伊人狠狠色j香婷婷综合| 久久国产天堂福利天堂| 亚洲三级视频在线观看| 国产婷婷成人久久av免费高清| 亚洲第一页在线| 国产主播一区二区三区| 在线亚洲精品福利网址导航| 亚洲国产精品成人| 性做久久久久久久久| 亚洲视频网站在线观看| 美女久久网站| 久久久久久自在自线| 欧美美女bbbb| 亚洲国产成人精品女人久久久| 国产亚洲午夜| 亚洲综合色视频| 亚洲欧美一区二区三区在线| 欧美精品www| 亚洲国产精品久久久| 亚洲国产精品日韩| 鲁大师成人一区二区三区| 老司机免费视频一区二区三区| 国产午夜精品理论片a级探花| 亚洲图色在线| 欧美一区二区三区成人| 国产精品视频一区二区高潮| 一区二区三区www| 亚洲视频在线一区| 欧美日韩精品中文字幕| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲黄色视屏| 欧美精品国产精品日韩精品| 亚洲激情图片小说视频| 亚洲精品一区二| 欧美成年人网站| 亚洲国产视频一区二区| 亚洲剧情一区二区| 欧美三级不卡| 亚洲综合首页| 久久久久www| 在线看一区二区| 欧美国产先锋| 日韩视频免费在线| 欧美一区二区三区另类 | 欧美一区二视频在线免费观看| 欧美日韩国产影片| 一本色道久久综合| 篠田优中文在线播放第一区| 国产麻豆日韩| 久久精品国产久精国产爱| 欧美电影免费观看网站| 日韩视频亚洲视频| 国产精品护士白丝一区av| 亚洲女爱视频在线| 欧美成人午夜免费视在线看片| 亚洲精品视频在线看| 国产精品美女久久久久久2018| 午夜亚洲精品| 蜜桃av综合| 中文国产一区| 国产一二三精品| 欧美sm视频| 亚洲一区二区三区高清不卡| 久久久精品日韩欧美| 亚洲精品久久久久| 国产精品一区视频| 免费高清在线视频一区·| 一本大道久久a久久精品综合| 久久福利资源站| 一区二区三区精品国产| 久久综合给合久久狠狠色| 在线观看视频一区二区| 欧美日韩在线视频一区| 欧美一级电影久久| 91久久精品国产91久久性色tv| 欧美一区不卡| 亚洲欧洲日本一区二区三区| 国产精品久久久一区二区三区| 久久综合色天天久久综合图片| 亚洲天堂偷拍| 91久久夜色精品国产九色| 久久久久久欧美| 亚洲欧美在线网| 一区二区久久久久久| 亚洲福利国产| 好吊色欧美一区二区三区四区| 欧美日韩一区二区三| 久久综合九色99| 欧美在线免费播放| 亚洲一二三区在线观看| 亚洲日本免费| 亚洲高清视频在线| 美女精品视频一区| 久久久精品动漫| 欧美在线观看网址综合| 亚洲综合国产| 亚洲调教视频在线观看| 99精品国产99久久久久久福利| 亚洲国产一区二区a毛片| 国产主播一区| 国产主播精品在线| 国产综合色一区二区三区 | 亚洲女ⅴideoshd黑人| 亚洲人成7777| 在线欧美小视频| 国产亚洲精品v| 国产免费成人| 国产乱码精品1区2区3区| 欧美午夜视频在线观看| 欧美日韩精品一区二区天天拍小说| 女生裸体视频一区二区三区| 久久手机精品视频| 免费美女久久99| 欧美激情bt| 欧美日韩色综合| 欧美日韩另类在线| 欧美性猛交99久久久久99按摩| 欧美三级网页| 国产精品久久久久免费a∨大胸| 国产精品yjizz| 国产精品网站在线播放| 国产日韩精品久久久| 韩日欧美一区二区| 亚洲国产成人精品女人久久久 | 欧美国产丝袜视频| 美女久久一区| 欧美—级a级欧美特级ar全黄| 欧美精品久久久久久久| 欧美日韩一级片在线观看| 国产精品国产自产拍高清av| 国产精品美女久久久久久久| 国产日韩欧美在线看| 黄色成人免费网站| 91久久黄色| 亚洲一区二区av电影| 久久九九国产精品| 亚洲高清在线观看| 一个人看的www久久| 欧美一区三区二区在线观看| 久久久久国产免费免费|