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

隨筆 - 132  文章 - 51  trackbacks - 0
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(7)

隨筆分類

隨筆檔案

文章分類

文章檔案

cocos2d-x

OGRE

OPenGL

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

BMP文件格式分析 - []

Tag: BMP文件格式分析 tc顯示真彩


一、BMP圖片的文件結(jié)構(gòu)
BMP文件的數(shù)據(jù)在磁盤上是按以下順序存儲的:
[位圖文件頭TBitmapFileHeader][位圖信息頭TBitmapInfo][圖象數(shù)據(jù)BGRA]
每段的具體內(nèi)容如下:
TBitmapFileHeader= packed record
    bfType: Word;               //占2位,文件標識‘BM’
    bfSize: DWORD;             //占4位,用字節(jié)表示的整個文件的大小
    bfReserved1: Word;       //占2位,保留字節(jié),為0
    bfReserved2: Word;       //占2位,保留字節(jié),為0
    bfOffBits: DWORD;         //占4位,圖象數(shù)據(jù)RGBA的起始地址
end;

TBitmapInfo= packed record
    biSize: DWORD;                   //占4位,位圖信息頭(Bitmap Info Header)的長度,一般為$28  
    biWidth: Longint;                 //占4位,位圖的寬度,以象素為單位  
    biHeight: Longint;                //占4位,位圖的高度,以象素為單位  
    biPlanes: Word;                   //占2位,位圖的位面數(shù)(注:該值將總是1)  
    biBitCount: Word;                //占2位,每個象素的位數(shù),設(shè)為32(32Bit位圖)  
    biCompression: DWORD;       //占4位,壓縮說明,設(shè)為0(不壓縮)    
    biSizeImage: DWORD;          //占4位,用字節(jié)數(shù)表示的位圖數(shù)據(jù)的大小。該數(shù)必須是4的倍數(shù)  
    biXPelsPerMeter: Longint;     //占4位,用象素/米表示的水平分辨率 
    biYPelsPerMeter: Longint;     //占4位,用象素/米表示的垂直分辨率  
    biClrUsed: DWORD;              //占4位,位圖使用的顏色數(shù)  
    biClrImportant: DWORD;       //占4位,指定重要的顏色數(shù)(到此處剛好40個字節(jié),$28)  
    biImportant: DWORD;          //占4位,調(diào)色板規(guī)范,設(shè)為0       
end;

圖象數(shù)據(jù)BGRA:這段為實際圖像數(shù)據(jù),默認的BMP是不支持ALPHA通道的,但對32位BMP而言,每個象素用32位(4個字節(jié))表示,前三個字節(jié)表示RGB分量,最后一個字節(jié)可以做為ALPHA通道的值,因此32位位圖可以存儲帶ALPHA通道的圖像,在文件中,各分量的存儲順序為BGRA,BGRA,BGRA,BGRA...
另外要注意的是,BMP圖像的象素存儲順序是從下到上

在DX格式中也有微軟的描述:
All formats are listed from left to right, most-significant bit to least-significant bit. For example, D3DFORMAT_ARGB is ordered from the most-significant bit channel A (alpha), to the least-significant bit channel B (blue). When traversing surface data, the data is stored in memory from least-significant bit to most-significant bit, which means that the channel order in memory is from least-significant bit (blue) to most-significant bit (alpha).

if (pDevice->CreateTexture (bmih.biWidth,bmih.biHeight,
                                
1,0,D3DFMT_A8R8G8B8 ,
                                D3DPOOL_MANAGED
                                ,ppTexture,
0)==D3D_OK)
    
{
        res
=1;
        D3DLOCKED_RECT     stLockedRect;
        
        (
*ppTexture)->LockRect( 0&stLockedRect, 00 );
        BYTE 
*pch=(BYTE*)stLockedRect.pBits;
        
for (int i=bmih.biHeight-1;i>=0;i--)
        
{
            
for (int j=0;j<bmih.biWidth;j++)
            
{
                pch[
0]=bmpdata[i*bmih.biWidth*4+j*4+0];                //B
                pch[1]=bmpdata[i*bmih.biWidth*4+j*4+1];                //G
                pch[2]=bmpdata[i*bmih.biWidth*4+j*4+2];                //R
                pch[3]=bmpdata[i*bmih.biWidth*4+j*4+3];                //A
                pch+=4;            
            }

        }

        (
*ppTexture)->UnlockRect(0);
    }

我們在鎖定一張紋理后,紋理的格式是D3DFMT_A8R8G8B8,我們進行內(nèi)存操作的時候就是反向的B,G,R,A進行賦值


BMP文件格式分析

簡介

BMP(Bitmap-File)圖形文件是Windows采用的圖形文件格式,在Windows環(huán)境下運行的所有圖象處理軟件都支持BMP圖象文件格式。Windows系統(tǒng)內(nèi)部各圖像繪制操作都是以BMP為基礎(chǔ)的。Windows 3.0以前的BMP圖文件格式與顯示設(shè)備有關(guān),因此把這種BMP圖象文件格式稱為設(shè)備相關(guān)位圖DDB(device-dependent bitmap)文件格式。Windows 3.0以后的BMP圖象文件與顯示設(shè)備無關(guān),因此把這種BMP圖象文件格式稱為設(shè)備無關(guān)位圖DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系統(tǒng)中仍然存在DDB位圖,象BitBlt()這種函數(shù)就是基于DDB位圖的,只不過如果你想將圖像以BMP格式保存到磁盤文件中時,微軟極力推薦你以DIB格式保存),目的是為了讓Windows能夠在任何類型的顯示設(shè)備上顯示所存儲的圖象。BMP位圖文件默認的文件擴展名是BMP或者bmp(有時它也會以.DIB.RLE作擴展名)。

6.1.2 文件結(jié)構(gòu)

位圖文件可看成由4個部分組成:位圖文件頭(bitmap-file header)、位圖信息頭(bitmap-information header)、彩色表(color table)和定義位圖的字節(jié)陣列,它具有如下所示的形式。

位圖文件的組成

結(jié)構(gòu)名稱

符號

位圖文件頭(bitmap-file header)

BITMAPFILEHEADER

bmfh

位圖信息頭(bitmap-information header)

BITMAPINFOHEADER

bmih

彩色表(color table)

RGBQUAD

aColors[]

圖象數(shù)據(jù)陣列字節(jié)

BYTE

aBitmapBits[]

位圖文件結(jié)構(gòu)可綜合在表6-01中。

01 位圖文件結(jié)構(gòu)內(nèi)容摘要

 

 

偏移量

域的名稱

大小

內(nèi)容

 

 

 

圖象文件

0000h

文件標識

2 bytes

兩字節(jié)的內(nèi)容用來識別位圖的類型:

‘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系統(tǒng)并沒有被普及開,所以在編程時,你只需判斷第一個標識“BM”就行。

 

0002h

File Size

1 dword

用字節(jié)表示的整個文件的大小

 

0006h

Reserved

1 dword

保留,必須設(shè)置為0

 

000Ah

Bitmap Data Offset

1 dword

從文件開始到位圖數(shù)據(jù)開始之間的數(shù)據(jù)(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

注:在Windows95982000等操作系統(tǒng)中,位圖信息頭的長度并不一定是28h,因為微軟已經(jīng)制定出了新的BMP文件格式,其中的信息頭結(jié)構(gòu)變化比較大,長度加長。所以最好不要直接使用常數(shù)28h,而是應(yīng)該從具體的文件中讀取這個值。這樣才能確保程序的兼容性。

 

0012h

Width

1 dword

位圖的寬度,以象素為單位

 

0016h

Height

1 dword

位圖的高度,以象素為單位

 

001Ah

Planes

1 word

位圖的位面數(shù)(注:該值將總是1


圖象

信息

 

 

001Ch

Bits Per Pixel

1 word

每個象素的位數(shù)

1 - 單色位圖(實際上可有兩種顏色,缺省情況下是黑色和白色。你可以自己定義這兩種顏色)

4 - 16 色位圖

8 - 256 色位圖

16 - 16bit 高彩色位圖

24 - 24bit 真彩色位圖

32 - 32bit 增強型真彩色位圖

 

001Eh

Compression

1 dword

壓縮說明:

0 - 不壓縮 (使用BI_RGB表示)

1 - RLE 8-使用8RLE壓縮方式(BI_RLE8表示)

2 - RLE 4-使用4RLE壓縮方式(BI_RLE4表示)

3 - Bitfields-位域存放方式(BI_BITFIELDS表示)

 

0022h

Bitmap Data Size

1 dword

用字節(jié)數(shù)表示的位圖數(shù)據(jù)的大小。該數(shù)必須是4的倍數(shù)

 

0026h

HResolution

1 dword

用象素/米表示的水平分辨率

 

002Ah

VResolution

1 dword

用象素/米表示的垂直分辨率

 

002Eh

Colors

1 dword

位圖使用的顏色數(shù)。如8-比特/象素表示為100h或者 256.

 

0032h

Important Colors

1 dword

指定重要的顏色數(shù)。當該域的值等于顏色數(shù)時(或者等于0時),表示所有顏色都一樣重要

調(diào)色板數(shù)據(jù)

根據(jù)BMP版本的不同而不同

Palette

N * 4 byte

調(diào)色板規(guī)范。對于調(diào)色板中的每個表項,這4個字節(jié)用下述方法來描述RGB的值:

 

1字節(jié)用于藍色分量

 

1字節(jié)用于綠色分量

 

1字節(jié)用于紅色分量

 

1字節(jié)用于填充符(設(shè)置為0)

圖象數(shù)據(jù)

根據(jù)BMP版本及調(diào)色板尺寸的不同而不同

Bitmap Data

xxx bytes

該域的大小取決于壓縮方法及圖像的尺寸和圖像的位深度,它包含所有的位圖數(shù)據(jù)字節(jié),這些數(shù)據(jù)可能是彩色調(diào)色板的索引號,也可能是實際的RGB值,這將根據(jù)圖像信息頭中的位深度值來決定。




構(gòu)件詳解

1. 位圖文件頭

位圖文件頭包含有關(guān)于文件類型、文件大小、存放位置等信息,在Windows 3.0以上版本的位圖文件中用BITMAPFILEHEADER結(jié)構(gòu)來定義:

typedef struct tagBITMAPFILEHEADER { /* bmfh */

UINT bfType;
DWORD bfSize;
UINT bfReserved1;
UINT bfReserved2;
DWORD bfOffBits;

} BITMAPFILEHEADER;

其中:
 

bfType

說明文件的類型.(該值必需是0x4D42,也就是字符'BM'。我們不需要判斷OS/2的位圖標識,這么做現(xiàn)在來看似乎已經(jīng)沒有什么意義了,而且如果要支持OS/2的位圖,程序?qū)⒆兊煤芊爆崱K裕诖酥唤ㄗh你檢察'BM'標識) 

bfSize

說明文件的大小,用字節(jié)為單位

bfReserved1

保留,必須設(shè)置為0

bfReserved2

保留,必須設(shè)置為0

bfOffBits

說明從文件頭開始到實際的圖象數(shù)據(jù)之間的字節(jié)的偏移量。這個參數(shù)是非常有用的,因為位圖信息頭和調(diào)色板的長度會根據(jù)不同情況而變化,所以你可以用這個偏移值迅速的從文件中讀取到位數(shù)據(jù)。

2. 位圖信息頭

位圖信息用BITMAPINFO結(jié)構(gòu)來定義,它由位圖信息頭(bitmap-information header)和彩色表(color table)組成,前者用BITMAPINFOHEADER結(jié)構(gòu)定義,后者用RGBQUAD結(jié)構(gòu)定義。BITMAPINFO結(jié)構(gòu)具有如下形式:

typedef struct tagBITMAPINFO { /* bmi */

BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];

} BITMAPINFO;

其中:
 

bmiHeader

說明BITMAPINFOHEADER結(jié)構(gòu),其中包含了有關(guān)位圖的尺寸及位格式等信息

bmiColors

說明彩色表RGBQUAD結(jié)構(gòu)的陣列,其中包含索引圖像的真實RGB值。

BITMAPINFOHEADER結(jié)構(gòu)包含有位圖文件的大小、壓縮類型和顏色格式,其結(jié)構(gòu)定義為:

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結(jié)構(gòu)所需要的字數(shù)。注:這個值并不一定是BITMAPINFOHEADER結(jié)構(gòu)的尺寸,它也可能是sizeof(BITMAPV4HEADER)的值,或是sizeof(BITMAPV5HEADER)的值。這要根據(jù)該位圖文件的格式版本來決定,不過,就現(xiàn)在的情況來看,絕大多數(shù)的BMP圖像都是BITMAPINFOHEADER結(jié)構(gòu)的(可能是后兩者太新的緣故吧:-)。

biWidth

說明圖象的寬度,以象素為單位

biHeight

說明圖象的高度,以象素為單位。注:這個值除了用于描述圖像的高度之外,它還有另一個用處,就是指明該圖像是倒向的位圖,還是正向的位圖。如果該值是一個正數(shù),說明圖像是倒向的,如果該值是一個負數(shù),則說明圖像是正向的。大多數(shù)的BMP文件都是倒向的位圖,也就是時,高度值是一個正數(shù)。(注:當高度值是一個負數(shù)時(正向圖像),圖像將不能被壓縮(也就是說biCompression成員將不能是BI_RLE8BI_RLE4)。

biPlanes

為目標設(shè)備說明位面數(shù),其值將總是被設(shè)為1

biBitCount

說明比特數(shù)/象素,其值為1481624、或32

biCompression

說明圖象數(shù)據(jù)壓縮的類型。其值可以是下述值之一:

 

BI_RGB:沒有壓縮;

 

BI_RLE8:每個象素8比特的RLE壓縮編碼,壓縮格式由2字節(jié)組成(重復象素計數(shù)和顏色索引)

 

BI_RLE4:每個象素4比特的RLE壓縮編碼,壓縮格式由2字節(jié)組成

 

BI_BITFIELDS:每個象素的比特由指定的掩碼決定。

biSizeImage

說明圖象的大小,以字節(jié)為單位。當用BI_RGB格式時,可設(shè)置為0

biXPelsPerMeter

說明水平分辨率,用象素/米表示

biYPelsPerMeter

說明垂直分辨率,用象素/米表示

biClrUsed

說明位圖實際使用的彩色表中的顏色索引數(shù)(設(shè)為0的話,則說明使用所有調(diào)色板項)

biClrImportant

說明對圖象顯示有重要影響的顏色索引的數(shù)目,如果是0,表示都重要。

現(xiàn)就BITMAPINFOHEADER結(jié)構(gòu)作如下說明:

(1) 彩色表的定位

應(yīng)用程序可使用存儲在biSize成員中的信息來查找在BITMAPINFO結(jié)構(gòu)中的彩色表,如下所示:

pColor = ((LPSTR) pBitmapInfo + (WORD) (pBitmapInfo->bmiHeader.biSize))

(2) biBitCount

biBitCount=1 表示位圖最多有兩種顏色,缺省情況下是黑色和白色,你也可以自己定義這兩種顏色。圖像信息頭裝調(diào)色板中將有兩個調(diào)色板項,稱為索引0和索引1。圖象數(shù)據(jù)陣列中的每一位表示一個象素。如果一個位是0,顯示時就使用索引0RGB值,如果位是1,則使用索引1RGB值。

biBitCount=4 表示位圖最多有16種顏色。每個象素用4位表示,并用這4位作為彩色表的表項來查找該象素的顏色。例如,如果位圖中的第一個字節(jié)為0x1F,它表示有兩個象素,第一象素的顏色就在彩色表的第2表項中查找,而第二個象素的顏色就在彩色表的第16表項中查找。此時,調(diào)色板中缺省情況下會有16RGB項。對應(yīng)于索引0到索引15

biBitCount=8 表示位圖最多有256種顏色。每個象素用8位表示,并用這8位作為彩色表的表項來查找該象素的顏色。例如,如果位圖中的第一個字節(jié)為0x1F,這個象素的顏色就在彩色表的第32表項中查找。此時,缺省情況下,調(diào)色板中會有256RGB項,對應(yīng)于索引0到索引255

biBitCount=16 表示位圖最多有216種顏色。每個色素用16位(2個字節(jié))表示。這種格式叫作高彩色,或叫增強型16位色,或64K色。它的情況比較復雜,當biCompression成員的值是BI_RGB時,它沒有調(diào)色板。16位中,最低的5位表示藍色分量,中間的5位表示綠色分量,高的5位表示紅色分量,一共占用了15位,最高的一位保留,設(shè)為0。這種格式也被稱作555 16位位圖。如果biCompression成員的值是BI_BITFIELDS,那么情況就復雜了,首先是原來調(diào)色板的位置被三個DWORD變量占據(jù),稱為紅、綠、藍掩碼。分別用于描述紅、綠、藍分量在16位中所占的位置。在Windows 95(或98)中,系統(tǒng)可接受兩種格式的位域:555565,在555格式下,紅、綠、藍的掩碼分別是:0x7C000x03E00x001F,而在565格式下,它們則分別為:0xF8000x07E00x001F。你在讀取一個像素之后,可以分別用掩碼上像素值,從而提取出想要的顏色分量(當然還要再經(jīng)過適當?shù)淖笥乙撇僮鳎T?/span>NT系統(tǒng)中,則沒有格式限制,只不過要求掩碼之間不能有重疊。(注:這種格式的圖像使用起來是比較麻煩的,不過因為它的顯示效果接近于真彩,而圖像數(shù)據(jù)又比真彩圖像小的多,所以,它更多的被用于游戲軟件)。

biBitCount=24 表示位圖最多有224種顏色。這種位圖沒有調(diào)色板(bmiColors成員尺寸為0),在位數(shù)組中,每3個字節(jié)代表一個象素,分別對應(yīng)于顏色RGB

biBitCount=32 表示位圖最多有232種顏色。這種位圖的結(jié)構(gòu)與16位位圖結(jié)構(gòu)非常類似,當biCompression成員的值是BI_RGB時,它也沒有調(diào)色板,32位中有24位用于存放RGB值,順序是:最高位保留,紅8位、綠8位、藍8位。這種格式也被成為888 32位圖。如果 biCompression成員的值是BI_BITFIELDS時,原來調(diào)色板的位置將被三個DWORD變量占據(jù),成為紅、綠、藍掩碼,分別用于描述紅、綠、藍分量在32位中所占的位置。在Windows 95(or 98)中,系統(tǒng)只接受888格式,也就是說三個掩碼的值將只能是:0xFF00000xFF000xFF。而在NT系統(tǒng)中,你只要注意使掩碼之間不產(chǎn)生重疊就行。(注:這種圖像格式比較規(guī)整,因為它是DWORD對齊的,所以在內(nèi)存中進行圖像處理時可進行匯編級的代碼優(yōu)化(簡單))。

(3) ClrUsed

BITMAPINFOHEADER結(jié)構(gòu)中的成員ClrUsed指定實際使用的顏色數(shù)目。如果ClrUsed設(shè)置成0,位圖使用的顏色數(shù)目就等于biBitCount成員中的數(shù)目。請注意,如果ClrUsed的值不是可用顏色的最大值或不是0,則在編程時應(yīng)該注意調(diào)色板尺寸的計算,比如在4位位圖中,調(diào)色板的缺省尺寸應(yīng)該是16sizeof(RGBQUAD),但是,如果ClrUsed的值不是16或者不是0,那么調(diào)色板的尺寸就應(yīng)該是ClrUsedsizeof(RGBQUAD)

(4) 圖象數(shù)據(jù)壓縮

BI_RLE8:每個象素為8比特的RLE壓縮編碼,可使用編碼方式和絕對方式中的任何一種進行壓縮,這兩種方式可在同一幅圖中的任何地方使用。

編碼方式:由2個字節(jié)組成,第一個字節(jié)指定使用相同顏色的象素數(shù)目,第二個字節(jié)指定使用的顏色索引。此外,這個字節(jié)對中的第一個字節(jié)可設(shè)置為0,聯(lián)合使用第二個字節(jié)的值表示:

 

第二個字節(jié)的值為0:行的結(jié)束。

 

第二個字節(jié)的值為1:圖象結(jié)束。

 

第二個字節(jié)的值為2:其后的兩個字節(jié)表示下一個象素從當前開始的水平和垂直位置的偏移量。

絕對方式:第一個字節(jié)設(shè)置為0,而第二個字節(jié)設(shè)置為0x030xFF之間的一個值。在這種方式中,第二個字節(jié)表示跟在這個字節(jié)后面的字節(jié)數(shù),每個字節(jié)包含單個象素的顏色索引。壓縮數(shù)據(jù)格式需要字邊界(word boundary)對齊。下面的例子是用16進制表示的8-位壓縮圖象數(shù)據(jù):

03 04 05 06 00 03 45 56 67 00 02 78 00 02 05 01 02 78 00 00 09 1E 00 01
這些壓縮數(shù)據(jù)可解釋為

壓縮數(shù)據(jù) 

擴展數(shù)據(jù)

03 04

04 04 04 

05 06

06 06 06 06 06 

00 03 45 56 67 00

45 56 67 

02 78

78 78 

00 02 05 01

從當前位置右移5個位置后向下移一行

02 78

78 78 

00 00

行結(jié)束

09 1E

1E 1E 1E 1E 1E 1E 1E 1E 1E 

00 01

RLE編碼圖象結(jié)束 

BI_RLE4

編碼方式:由2個字節(jié)組成,第一個字節(jié)指定象素數(shù)目,第二個字節(jié)包含兩種顏色索引,一個在高4位,另一個在低4位。第一個象素使用高4位的顏色索引,第二個使用低4位的顏色索引,第3個使用高4位的顏色索引,依此類推。

絕對方式:這個字節(jié)對中的第一個字節(jié)設(shè)置為0,第二個字節(jié)包含有顏色索引數(shù),其后續(xù)字節(jié)包含有顏色索引,顏色索引存放在該字節(jié)的高、低4位中,一個顏色索引對應(yīng)一個象素。此外,BI_RLE4也同樣聯(lián)合使用第二個字節(jié)中的值表示:

 

第二個字節(jié)的值為0:行的結(jié)束。

 

第二個字節(jié)的值為1:圖象結(jié)束。

 

第二個字節(jié)的值為2:其后的兩個字節(jié)表示下一個象素從當前開始的水平和垂直位置的偏移量。

下面的例子是用16進制數(shù)表示的4-位壓縮圖象數(shù)據(jù):

03 04 05 06 00 06 45 56 67 00 04 78 00 02 05 01 04 78 00 00 09 1E 00 01

這些壓縮數(shù)據(jù)可解釋為

壓縮數(shù)據(jù)

擴展數(shù)據(jù)

03 04

0 4 0

05 06

0 6 0 6 0 

00 06 45 56 67 00

4 5 5 6 6 7 

04 78

7 8 7 8 

00 02 05 01

從當前位置右移5個位置后向下移一行

04 78

7 8 7 8 

00 00

行結(jié)束

09 1E

1 E 1 E 1 E 1 E 1 

00 01

RLE圖象結(jié)束 

3. 彩色表

彩色表包含的元素與位圖所具有的顏色數(shù)相同,象素的顏色用RGBQUAD結(jié)構(gòu)來定義。對于24-位真彩色圖象就不使用彩色表(同樣也包括16位、和32位位圖),因為位圖中的RGB值就代表了每個象素的顏色。彩色表中的顏色按顏色的重要性排序,這可以輔助顯示驅(qū)動程序為不能顯示足夠多顏色數(shù)的顯示設(shè)備顯示彩色圖象。RGBQUAD結(jié)構(gòu)描述由RGB相對強度組成的顏色,定義如下:

typedef struct tagRGBQUAD { /* rgbq */

BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;

} RGBQUAD;

其中:
 

rgbBlue

指定藍色強度

rgbGreen

指定綠色強度

rgbRed

指定紅色強度

rgbReserved

保留,設(shè)置為0

4. 位圖數(shù)據(jù)

緊跟在彩色表之后的是圖象數(shù)據(jù)字節(jié)陣列。圖象的每一掃描行由表示圖象象素的連續(xù)的字節(jié)組成,每一行的字節(jié)數(shù)取決于圖象的顏色數(shù)目和用象素表示的圖象寬度。掃描行是由底向上存儲的,這就是說,陣列中的第一個字節(jié)表示位圖左下角的象素,而最后一個字節(jié)表示位圖右上角的象素。(只針對與倒向DIB,如果是正向DIB,則掃描行是由頂向下存儲的),倒向DIB的原點在圖像的左下角,而正向DIB的原點在圖像的左上角。同時,每一掃描行的字節(jié)數(shù)必需是4的整倍數(shù),也就是DWORD對齊的。如果你想確保圖像的掃描行DWORD對齊,可使用下面的代碼:

(((width*biBitCount)+31)>>5)<<2

5. 參考書目

《圖象文件格式(上、下)—Windows編程》
《圖像文件格式大全》
Programming Windows by Charles Petzold

6. 相關(guān)站點

各種格式:http://www.wotsit.org/
各種格式:http://www.csdn.net/
位圖格式:http://www.cica.indiana.edu/graphics/image_specs/bmp.format.txt

 

posted on 2010-05-28 11:00 風輕云淡 閱讀(5509) 評論(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>
            久久久人成影片一区二区三区观看 | 久久精品国产v日韩v亚洲| 性久久久久久| 狠狠干成人综合网| 另类图片国产| 日韩午夜在线| 欧美伊人久久久久久久久影院| 黑人操亚洲美女惩罚| 另类激情亚洲| 一区二区三区高清视频在线观看| 欧美一区二区三区免费看| 一区二区在线视频播放| 欧美激情va永久在线播放| 国产精品99久久久久久久女警 | 亚洲精品在线电影| 欧美一区二区三区免费观看视频| 樱花yy私人影院亚洲| 欧美极品一区二区三区| 亚洲免费视频中文字幕| 欧美成熟视频| 亚洲专区在线| 亚洲国产成人久久| 国产精品第一区| 乱中年女人伦av一区二区| 宅男66日本亚洲欧美视频| 美女免费视频一区| 香蕉国产精品偷在线观看不卡| 亚洲国内在线| 国产麻豆成人精品| 欧美黄色影院| 久久精彩免费视频| 999在线观看精品免费不卡网站| 久久视频精品在线| 亚洲永久免费观看| 日韩视频不卡中文| 黑人巨大精品欧美黑白配亚洲| 欧美三区美女| 欧美国产日产韩国视频| 久久大逼视频| 亚洲欧美激情一区| 日韩天堂在线观看| 亚洲国产激情| 狂野欧美一区| 欧美专区日韩专区| 亚洲一区图片| 日韩视频在线你懂得| 精品51国产黑色丝袜高跟鞋| 国产精品永久免费| 欧美性猛交xxxx乱大交蜜桃| 欧美大片在线观看| 美女视频黄免费的久久| 久久成人久久爱| 午夜精品久久久久99热蜜桃导演| 99精品福利视频| 最新日韩在线| 亚洲激情亚洲| 欧美激情成人在线| 欧美电影在线观看| 欧美岛国在线观看| 免费看的黄色欧美网站| 久久婷婷麻豆| 久久一区视频| 久久久久久国产精品mv| 久久九九电影| 久久久久国产精品人| 久久久国产亚洲精品| 久久精品国产一区二区三区| 欧美在线免费观看视频| 欧美一区日韩一区| 久久久www| 久久在线免费| 女女同性精品视频| 亚洲电影激情视频网站| 欧美福利网址| 亚洲欧洲精品一区二区| 亚洲精品国偷自产在线99热| 亚洲美女黄色片| 这里是久久伊人| 亚洲字幕在线观看| 久久国产99| 免费成人在线观看视频| 欧美电影打屁股sp| 欧美日韩一区在线观看视频| 国产精品成人va在线观看| 国产精品久久久久国产精品日日| 国产精品你懂的在线欣赏| 国产精品永久在线| ●精品国产综合乱码久久久久| 亚洲黄网站黄| 一区二区三区毛片| 欧美影片第一页| 免费成人av资源网| 亚洲三级视频| 亚洲影院色无极综合| 久久国产99| 欧美精品一区二区在线观看| 欧美视频在线免费看| 国产一区二区精品丝袜| 亚洲黄页一区| 亚洲欧美日韩人成在线播放| 久久久青草婷婷精品综合日韩 | 欧美日韩一区二区在线| 国产日韩精品一区| 亚洲国产精品一区在线观看不卡| 一本色道久久精品| 久久免费视频一区| 亚洲日本激情| 性欧美长视频| 欧美国产精品久久| 国产一区二区剧情av在线| 亚洲国产日韩在线| 欧美一区激情视频在线观看| 农村妇女精品| 亚洲自拍偷拍一区| 欧美成人免费全部| 国产欧美日韩视频一区二区| 亚洲人体影院| 久久久久久久999| 一区二区国产精品| 蜜月aⅴ免费一区二区三区| 国产精品区二区三区日本| 亚洲七七久久综合桃花剧情介绍| 欧美一级理论片| 亚洲欧洲精品一区二区三区波多野1战4 | 99精品热视频| 免费欧美在线视频| 亚洲与欧洲av电影| 欧美区日韩区| 亚洲电影专区| 久久久水蜜桃av免费网站| 99热精品在线| 欧美激情视频网站| 在线视频观看日韩| 久久国产免费| 亚洲一区二区高清| 欧美日韩在线视频首页| 亚洲国产日韩一区二区| 久久久久.com| 西西裸体人体做爰大胆久久久| 欧美日韩国产电影| 亚洲日本va午夜在线电影| 久久久久九九视频| 欧美亚洲免费高清在线观看| 欧美视频在线观看| 一二三区精品| 亚洲啪啪91| 欧美精品一区二区三区一线天视频| 黄色精品一区二区| 久久人人爽人人爽爽久久| 亚洲欧美成人一区二区在线电影| 欧美性jizz18性欧美| 亚洲午夜av在线| 日韩午夜在线电影| 欧美视频日韩| 午夜精彩视频在线观看不卡| 99精品热6080yy久久| 欧美日韩久久精品| 亚洲色图在线视频| 夜夜爽夜夜爽精品视频| 欧美日韩国内| 亚洲综合丁香| 亚洲免费小视频| 国产日韩欧美a| 久久久噜噜噜久久中文字幕色伊伊| 亚洲一区二区三区国产| 国产伦精品一区二区三区高清| 亚洲欧美综合网| 亚洲欧美日韩精品在线| 国产欧美日韩一区二区三区在线观看| 亚洲欧美日韩专区| 亚洲欧美亚洲| 国内精品99| 欧美国产精品劲爆| 欧美日韩国产一区二区三区地区 | 亚洲欧美成人| 好吊妞这里只有精品| 欧美不卡高清| 欧美日韩ab| 午夜精彩视频在线观看不卡| 香蕉久久精品日日躁夜夜躁| 精品动漫3d一区二区三区| 欧美激情无毛| 欧美性天天影院| 久久中文久久字幕| 欧美大片在线观看一区| 亚洲一区欧美激情| 久久精品国产免费观看| 亚洲国产成人av好男人在线观看| 亚洲人成7777| 国产精品亚洲不卡a| 蜜桃久久精品一区二区| 欧美日韩爆操| 久久精品一区二区三区四区| 老司机午夜精品视频在线观看| 一区二区三区www| 欧美一级理论性理论a| 亚洲激情网址| 亚洲一区在线视频| 亚洲经典自拍| 香蕉久久一区二区不卡无毒影院|