AVI RIFF 文件參考手冊

轉自: http://blog.csdn.net/njuitjf/archive/2010/06/19/5680639.aspx

微軟的  AVI  文件格式是一種用於捕獲、編輯和回放  audio-video  序列的  RIFF  文件規範。總體上講,AVI  文件包含多個針對不同數據的流。 大部分  AVI  序列使用  audio    video  流。 一個簡單的  AVI 序列特例可以只包含  video  數據而不包含  audio  數據。

本部分並沒有介紹  OpenDML  對於  AVI  文件格式的擴展。如果要對其深入研究, 請參考  OpenDML AVI M-JPEG  文件格式小組委員會出版的《 OpenDML AVI File Format Extensions  》。

 

FOURCCs

 

一個  FOURCC( four-character code4 字符碼) 是一個包含4ASCII 碼字符串的32 位的無符號整型數據。例如, 在  Little-Endian  系統中,  FOURCC 'abcd'  表示爲  0x64636261FOURCC 中也可以包含空格,如  ' abc'  也是一個有效的FOURCC  AVI  文件使用  FOURCC 碼標示流的類型、數據chunkindex 元素, 和其他的信息。

 

RIFF  文件格式

 

AVI  文件格式是基於  RIFF ( resource interchange file format )  文檔格式的。一個  RIFF  文件包含一個RIFF  頭, 以及其後的多個  list    chunk

  • RIFF  頭的格式:

    RIFF’+ 文件大小+ 文件類型+ (數據)

    'RIFF' 就是FOURCC'RIFF' 。文件大小是一個表示文件中數據大小的4 字節值。文件類型是一個FOURCC 碼,表示文件類型。文件大小,包含的是文件類型以及其後數據的大小,不包含FOURCC'RIFF' 和文件大小本身所佔的空間。

  • 塊(chunk )的格式:

    ckID+ckSize+ckData

    其中,  ckID 是一個說明該chunk 中所包含的數據的FOURCC 碼。szSize  是表示  ckData  中數據大小的4 字節數值。ckData0 個或多個字節的數據。數據總是填充到就近的WORD 邊界。ckSize 表示的是chunk 中有效數據的大小,它不包括填充部分的大小,以及ckIDckSize 所佔的空間。

  • List  格式:

    'LSIT'+listSize+listType+listData

    'LIST' 就是FOURCC'LIST'listSize 是表示list 大小的4 字節數值。listType 是一個FOURCC 碼。listData 中是以任意順序排列的多個listchunklistSize 包含的是listTypelistData 的大小,而不包含FOURCC'LIST' 和文件大小本身所佔的空間。

 

本文的餘下內容,將用以下符號表示  RIFF chunk

ckID ( ckData )

其中chunk 大小的概念比較模糊。使用以上符號,一個list 可以表示爲:

'LIST' ( listType ( listData ) )

可選成員被放到了方括號中:[ 可選成員]

 

AVI RIFF Form

 

AVI  文件在  RIFF  頭中用  FOURCC  'AVI ' 標示。所有的 AVI 文件都被強制要求包含兩個 LIST  類型的 chunk ,分別定義了 stream 的格式和 stream 的數據。一個 AVI 文件還可能包含一個 index chunk ,其中包含了數據 chunk 在文件中的位置。包含以上部分的 AVI 文件的格式爲:

RIFF ('AVI '



LIST ('hdrl' ... )
LIST ('movi' ... )
['idx1' (<AVI Index>) ]
)
' hdrl ' list 定義了數據的格式,是第一個必須的 LIST chunk 'movi' list 包含了 AVI 序列中的數據,是第二個必須的 LIST chunk 'idx1'list 包含了 index 數據。這三部分在 AVI 文件中的順序是特定的。
注意: OpenDML 擴展中定義了另外一種 index ,用 FOURCC 'indx' 進行標示。
'hdrl' list 'movi' list subchunk 來表示它們的數據。 下面的例子列出了 AVI RIFF 文件的結構, 其中的 list 需要包含相應的 chunk
RIFF ('AVI '
LIST ('hdrl'
'avih'(<Main AVI Header>)
LIST ('strl'
'strh'(<Stream header>)
'strf'(<Stream format>)
[ 'strd'(<Additional header data>) ]
[ 'strn'(<Stream name>) ]
...
)
...
)
LIST ('movi'
{SubChunk | LIST ('rec '
SubChunk1
SubChunk2
...
)
...
}
...
)
['idx1' (<AVI Index>) ]
)
AVI Main Header
'hdrl' list 的開頭部分是一個包含主 AVI header 'avih' chunk 。主 header 中包含了 AVI 文件的一些全局信息,如:文件中包含多少個流, AVI 序列的寬高等等。主 header chunk 的內容可以用結構體 AVIMAINHEADER 表示。
AVI Stread Headers
header 後面跟的是一個或多個 'strl' list 。每一個數據流都需要有一個 'strl' list 。每一個 'strl' list 都必須包含文件中一種流的信息,並且必須包含該流的 header chunk('strh') format chunk('strf') 。另外,一個 'strl' list 還可能包含一個流的頭數據 chunk 'strd' )和一個流的名稱 chunk('strh')
流的 header chunk ('strh') 可以用結構體 AVISTREAMHEADER 表示。
流的 format chunk('strf') 一定要跟在 header chunk 的後面。 Format chunk 描述了流中數據的格式。 Format chunk 中包含什麼數據,依賴於流的類型。對於 video 流,其中的數據是一個 BITMAPINFO 結構體,如果指定的話其中將包含一個調色板。對於 audio 流,其中的數據是一個 WAVEFORMATEX 結構體。
如果包含流的 header data chunk('strd') ,它將緊隨在流的 format chunk('strf') 之後。其格式已經包含的內容由 codec driver 來定義。通常情況下, drivers 使用其中的數據作爲配置信息。讀或者寫 AVI 文件的應用程序不需要解釋這些信息,只需要作爲一個內存塊,傳給 driver ,或者從 driver 處獲取。
可選的 'strn'chunk 包含一個描述流的,以空字符爲結尾的文本字符串。
'hdrl'list 中流的頭信息,按照其中 'strl'chunk 的順序,與 'movi'list 中的流數據關聯起來。其中,第一個 'strl'chunk 表示 stream 0 ,第二個表示 stream 1 ,以此類推。
Stream Data ( 'movi' list )
頭信息的後面,是一個包含流的真實數據的 'movi'list ,這些數據包括視頻幀、音頻採樣等。數據 chunk 可以直接作爲成員,存在於 'movi'list 中,也可以組成一個 'rec 'list ,整體作爲一個成員,存在於 'movi'list 中。一個 'rec 'list 中包含的所有的 chunk ,應該一次從磁盤中讀入到內存,這樣是爲了那些從磁盤交錯播放的文件。
一個數據 chunk FOURCC 碼,前兩個字節的數字信息,用來說明該 chunk 屬於哪個流;後兩個字節的字符信息,說明該 chunk 中數據的類型。

Two-character code

Description

db

Uncompressed video frame

dc

Compressed video frame

pc

Palette change

wb

Audio data

例如,如果


stream 0 


包含的是


audio


, 該流的


data chunk


將含有


FOURCC





'00wb'





stream 1


包含的是


video


,該流的


data chunk 


將包含


FOURCC





'01db'


或者


'01dc'





Video 





data chunk


還可以在


AVI


序列中定義一個新的調色板條目。沒一個 改變調色板(


palette-change


)的


chunk( 'xxpc' )


包含一個


AVIPALCHANGE


的結構體。如果一個流包含有調色板變更,該流的


AVISTREAMHEADER


結構體


( strh )


中的成員


deFlags


會被設置


AVISF_VIDEO_PALCHANGES 


標誌。



文本流可以使用其他任意兩個字符的編碼。
AVI Index Entries
可選的 index chunk('idx1') 可以跟在 'movi'list 的後面。 index 包含了一個數據 chunk 和它們在文件中位置的列表 (list) 。它包含一個 AVIOLDINDEX 結構體,其中有針對每個數據 chunk 的條目,也包括 'rec 'chunk 。如果文件包含了 index AVIMAINHEADER 結構體 ( 'avih' ) 中的成員 dwFlags 需要被設置 AVIF_HASINDEX 標誌。
Other Data Chunks
如果需要,可以在數據中插入 'JUNK'chunk 。應用程序應該忽略 'JUNK'chunk 所包含的內容。
=============================== 相關結構體 ========================================
----------------AVIMAINHEADER 結構體 ------------------------

AVIMAINHEADER 結構體中定義了 AVI 文件的全局信息。

typedef struct _avimainheader {



FOURCC fcc;
DWORD cb;
DWORD dwMicroSecPerFrame;
DWORD dwMaxBytesPerSec;
DWORD dwPaddingGranularity;
DWORD dwFlags;
DWORD dwTotalFrames;
DWORD dwInitialFrames;
DWORD dwStreams;
DWORD dwSuggestedBufferSize;
DWORD dwWidth;
DWORD dwHeight;
DWORD dwReserved[4];
} AVIMAINHEADER;

fcc

FOURCC  碼。此處必須爲 'avih'

cb

結構體的大小,不包括開頭 的8 字節。

dwMicroSecPerFrame

指定幀之間的微秒數。此值表明本文件的總時間。

dwMaxBytesPerSec

指定文件的近似最大數據速率。此值表明該系統每秒要處理的字節數,以表現一個AVI 序列,正如在main header    stream header chunks  中其他參數指所指定的字節數。

dwPaddingGranularity

規定以字節爲單位的數據對齊。將數據以該值的整數倍進行對齊。

dwFlags

包含0 個或多個一下標誌的按位組合:

Value

Description

AVIF_COPYRIGHTED

表明AVI 文件包含了版權數據和軟件。如果設置了改標誌,將不允許軟件對該數據進行拷貝。

AVIF_HASINDEX

表明AVI 文件包含一個index

AVIF_ISINTERLEAVED

表明AVI 文件是交叉的。

AVIF_MUSTUSEINDEX

表明應用程序需要使用index ,而不是物理上的順序,來定義數據的展現順序。例如,該標誌可以用於創建一個編輯用的幀列表。

AVIF_WASCAPTUREFILE

表明該文件是一個用於捕獲實時視頻的,而特別分配的AVI  文件。如果一個文件設置了該標誌,在用戶寫該文件之前,應用程序應該發出警告,因爲用戶可能會對該文件進行碎片整理。

 

AVIF_COPYRIGHTED

0x00020000

AVIF_HASINDEX

0x00000010

AVIF_ISINTERLEAVED

0x00000100

AVIF_MUSTUSEINDEX

0x00000020

AVIF_WASCAPTUREFILE

0x00010000

TRUSTCKTYPE

0x00000800

 

dwTotalFrames

指定本文件中包含的幀數據的總數。也就是指定文件中總共包含多少幀。

dwInitialFrames

指定交錯文件中的初始幀。非交錯文件,該參數應該被設置爲0 。如果你正在創建一個交錯文件,在該參數中指定文件中,AVI 文件的初始幀之前,幀的數量,即文件中在初始幀前面還有多少幀。

爲了讓音頻驅動有足夠的音頻去處理,交錯文件中的音頻數據必須與視頻數據有一定的偏移。通常情況下,音頻數據必須前移足夠的幀,以使大約 0.75 秒的音頻數據被預裝。應該將音頻數據中偏移的幀數設置到成員 dwInitialRecords (未找到該成員,懷疑應該是 dwInitialFrames )。音頻流 header 的結構體 AVISTREAMHEADER dwInitialFrames  成員,應該被設置爲同樣的值。

dwStreams

指定文件中包含的流的數量。例如,一個包含視頻和音頻數據的文件有兩個流。

dwSuggestedBufferSize

指定讀該文件用的建議的緩存大小。一般來說,該大小要足以包含文件中最大的數據塊(chunk )。如果該成員被設置爲0 ,或者太小,播放軟件在播放時就需要重新分配內容,這將導致性能的下降。對於一個交叉文件,該緩存大小應該足以讀取一整條記錄(在movi list 中,有的數據以chunk 的形式存在,有的數據以record 即記錄的形式存在,一個record  是多個chunk 的組合),而不是一個chunk

dwWidth

指定該AVI 文件的寬,以像素爲單位。

dwHeight

指定該AVI 文件的高,以像素爲單位。

dwReserved

保留,設置爲0

Requirements

Header:   Aviriff.h.

----------------AVISTREAMHEADER


結構體


------------------------


AVISTREAMHEADER 結構體包含了 AVI 文件中一個流的相關信息。

Syntax

typedef struct _avistreamheader {


FOURCC fcc;
DWORD cb;
FOURCC fccType;
FOURCC fccHandler;
DWORD dwFlags;
WORD wPriority;
WORD wLanguage;
DWORD dwInitialFrames;
DWORD dwScale;
DWORD dwRate;
DWORD dwStart;
DWORD dwLength;
DWORD dwSuggestedBufferSize;
DWORD dwQuality;
DWORD dwSampleSize;
struct {
short int left;
short int top;
short int right;
short int bottom;
} rcFrame;
} AVISTREAMHEADER;

Members

fcc

指定一個FOURCC 碼,此處必須爲'strh'

cb

指定結構體的大小,不包含開頭的 8 字節,即 fcc cb 所佔的空間。

fccType

包含一個標識流中數據類型的FOURCC 碼。針對視頻和音頻,標準的AVI 值定義如下:

FOURCC

Description

'auds'

Audio stream

'mids'

MIDI stream

'txts'

Text stream

'vids'

Video stream

 

fccHandler

該成員是可選的,包含了一個FOURCC 碼,用於標識一個特定的數據處理程序。該數據處理程序是該流的首選數據處理程序。對於視頻流和音頻流來說,這是一個解碼流時用的編解碼器。

dwFlags

包含數據流的所有標誌。這些標誌的高位序字,具體到流中包含的數據類型(意思應該是,這些標誌的高位,說明了流的類型)。標準標誌定義如下:

AVISF_DISABLED

表明該流默認情況下不被啓用。

AVISF_VIDEO_PALCHANGES

表明該流中包含調色板變換。該標誌提示播放軟件,它需要可變的調試板。

 

wPriority

指定一種流的優先級。例如,一個文件中包含了多個音頻流,其中優先級最高的可能會是默認的流。

wLanguage

Language tag.

dwInitialFrames

指定在交叉文件中,音頻流相對於視頻流要向前偏移多少。通常情況下,是大約 0.75 秒。如果你正在創建交叉文件,在該成員中指定文件中, AVI 序列的初始幀之前,幀的數量。詳細信息,請參考 AVIMAINHEADER 結構體中  dwInitialFrames   成員。

dwScale

  dwRate   一起,決定該流所要使用的時間尺度。用 dwScale  去除 dwRate  ,得到一秒鐘樣本的數量。對於視頻流,這就是幀率 ( fram rate ) 。對於音頻流,這個頻率相當於播放 nBlockAlign  個字節的音頻需要的時間,對於 PCM 音頻,它只是採樣率。

dwRate

參考 dwScale .

dwStart

指定這個流開始的時間。其單位有主文件頭中的 dwRate  dwScale  成員定義(即其單位是 dwRate/dwScale )。通常, dwStart 0 ,但是它也可以爲不與文件同時啓動的流定義一個時間延遲。

dwLength

指定這個流的長度。單位由流的頭信息中的 dwRate  dwScale  來確定(即其單位是 dwRate/dwScale )。(對於視頻流, dwLength 就是流包含的總幀數;對於音頻流, dwLength 就是包含的 block 的數量, block 是音頻解碼器能處理的原子單位)。 dwLength/(dwRate/dwScale) ,即 dwLength * dwScale / dwRate ,可以得到流的總時長。

dwSuggestedBufferSize

指定讀該流時需要的緩存的大小。通常情況下,這是一個與該流中最大的chunk 的大小相對應的值。使用準確的緩存大小,可以提高播放器的性能。如果你不知道準確的緩存大小,可以設置爲0

dwQuality

指定一個流數據的質量指標。該指標是一個010,000 的數值。對於壓縮數據,這通常是一個作爲質量參數值傳給壓縮軟件的數值。如果該值爲-1 ,驅動將使用默認的質量值。

dwSampleSize

指定 一個數據樣本的大小。如果樣本的大小可變,該成員將被設置爲 0 。如果該值爲非 0 ,該文件中的多個樣本可以組成一個信號 chunk 。如果該值爲 0 ,數據中的每個樣本(例如,一個視頻幀)必須放在一個單獨的 chunk 中。對於視頻流,該數值通常爲 0 ,雖然當所有的視頻幀都具有相同的大小時,它也可以爲非 0 。對於音頻流,該數值應該和結構體 WAVEFORMATEX 中的成員 nBlockAlign 一致。

rcFrame

指定一個在由 AVI 主頭結構中的 dwWidth  成員和 dwHeight  成員決定的電影矩形中,文本流或視頻流的目標矩形。 rcFrame  成員通常用於支持多個視頻流。將該矩形設置爲與電影矩形對應的座標,以更新整個電影矩形。該成員的單位是像素。目標矩形的左上角與電影矩形的左上角關聯。

Remarks

該結構體的部分成員在結構體AVIMAINHEADER 中也存在。AVIMAINHEADER 中的數據是針對整個文件的,AVISTREAMHEADER 中的數據是針對單個流的。

Requirements

Header:   Aviriff.h.

----------------BITMAPINFO


結構體


------------------------



BITMAPINFO 結構體定義了一個基於 windows DIB( device-independent bitmap) 的尺寸和顏色信息。

Syntax

typedef struct tagBITMAPINFO { 

BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;

Members

bmiHeader
指定一個包含尺寸和顏色格式信息的位圖信息頭結構體。使用BITMAPINFOHEADER 結構體。
bmiColors
包含下列之一:
  • 一個RGBQUAD 結構體的數組。其成員構成顏色表。
  • 一個指定當前實現了的邏輯調色板中 的索引的16 位無符號整型。 使用 DIB 的函數允許使用 bmiColors  的這種用法。如果 bmiColors  包含了一個已實現的邏輯調色板的索引,它們必須調用如下的位圖函數: CreateDIBPatternBrushPt   CreateDIBSection CreateDIBSection  函數的參數 iUsage  必須被設置爲 DIB_PAL_COLORS  其中條目的個數依賴於 BITMAPINFOHEADER  結構體中的 biBitCount  biClrUsed 成員。 bmiColors  表中的顏色按重要性進行排列。詳細信息,請參考: Remarks
  • 如果 bmiHeader.biCompression  被設置爲了 BI_RGB  ,你可以將 bmiColors  數組的大小設置爲 0

Remarks

一個設備無關的位圖包含兩個不同的部分:一個描述位圖尺寸和顏色的BITMAPINFO 結構體,和一個定義位圖像素的字節數組。數組中的數據排列在一起,但是必須用0 將每個掃描行與LONG 類型邊界對齊。

如果位圖的高是正數,則該位圖是一個自下而上的DIP ,並且它是以左下角起始的。

如果位圖的高是負數,則該位圖是一個自上而下的DIP ,並且它是以左上角起始的。

當一個位圖緊跟在 BITMAPINFO  之後時,該位圖將被打包。打包的位圖通過一個指針進行引用。

對於打包位圖,當使用 DIB_PAL_COLORS  模式時, BITMAPINFOHEADER  結構體的 ClrUsed  必須被設置爲一個偶數,這樣 DIB 位圖數組將從 DWORD 邊界上開始。

如果一個位圖保存在文件中,或者將要傳送給其他應用程序, bmiColors  成員不應該保護調色板索引。

位圖的顏色表應保護明確的RGB 數值,除非這個應用程序獨佔使用和控制該位圖。

Security Note    包括無效格式描述的普通級別的錯誤,可以在內容(哪兒?)中找到。例如,顏色表可以跟在 BITMAPINFOHEADER  結構體後面。

BITMAPINFO  結構體由一個 BITMAPINFOHEADER  結構體以及一個跟在其後面的 RGBQUAD  數值數組構成。數組的大小由 BITMAPINFOHEADER 結構體的成員 biClrUsed  決定。

在驗證分配給 BITMAPINFO  結構體的 buffer 的大小之前,不要將一個顏色表拷貝到 BITMAPINFO  結構體。

Requirements

OS Versions:   Windows CE 1.0 and later.
Header:   Windows.h.

----------------BITMAPINFOHEADER


結構體


------------------------



(以下的解釋來自: http://msdn.microsoft.com/en-us/library/dd183376(VS.85).aspx 。後面還會有一個對該結構體的說明,與此稍有不同。)
該結構體包含了一個 DIB(device-independent bitmap) 尺寸和顏色個數的信息。

Syntax


typedef struct tagBITMAPINFOHEADER { 

DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;

Members

biSize
指定結構體的大小,以字節爲單位。
該大小不包含 biClrUsed  成員中提到的顏色表或者屏蔽位的大小。
詳細請參考Remarks 
biWidth
指定位圖的寬,以像素爲單位。
biHeight
指定位圖的高,以像素爲單位。
如果 biHeight  正值,則該位圖是一個自下而上的 DIB ,並且它從左下角開始。
如果 biHeight  負值,則該位圖是一個自上而下的 DIB ,並且它從左上角開始。
如果 biHeight  負值,表明了一個自上而下的 DIB ,此時, biCompression  必須被設置爲 BI_RGB  或者  BI_BITFIELDS 。自上而下的 DIB 不能被壓縮。
biPlanes
指定目標設備平面層(plane )的個數。
該值必須被設置爲1
biBitCount
指定一個像素所佔的位數。
BITMAPINFOHEADER   結構體的 biBitCount  成員決定了一個像素佔幾個位,以及位圖中包含的最大的顏色數。
該成員只能包含一個如下的值:

Value

Description

1

說明該位圖是一個黑白的, bmiColors  成員包含兩個條目。

在該位圖中,每一位代表一個像素。

如果該位爲 0 , 則該像素用 bmiColors  表中的第一個條目中的顏色進行顯示。

如果該位爲 1 , 則該像素用 bmiColors  表中的第二個條目中的顏色進行顯示。

2

位圖可以有4 種顏色值。

4

位圖最大可以有 16 種顏色, bmiColors  成員包含 16 個條目。

位圖中的每一個像素,由顏色表中的一個4 位的索引進行表示。

例如,如果位圖中的第一個字節爲  0x1F ,該字節表示兩個像素。第一個像素包含表中的第二個條目的顏色,第二個像素包含表中第16 個條目的顏色。

8

位圖最大可以有 256 種顏色, bmiColors  成員包含 256 個條目。在這種情況下,數組中的每一個字節標示一個像素。

16

位圖最大可以有2^16  種顏色。

如果 BITMAPINFOHEADER  結構體的 biCompression  成員爲 BI_RGB  ,則 bmiColors  成員 NULL 

該位圖中,每一個字代表一個像素。紅色,綠色和藍色的相對強度,由每個顏色組件的5 個位來表示。

對應藍色的值,在最低的5 個位,其後是分別對應綠色和紅色的各5 位。

最高的一位沒有使用。 bmiColors  顏色表用於優化基於調色板設備的顏色,並且必須包含 BITMAPINFOHEADER  結構體的 biClrUsed  成員指定的條目的個數。

24

位圖最大可以有 2^24  種顏色,並且 bmiColors  成員爲 NULL

位圖數組中的每三個字節,表示一個像素中藍色,綠色和紅色的相對強度。

bmiColors  顏色表用於優化基於調色板設備的顏色,並且必須包含 BITMAPINFOHEADER 結構體的 biClrUsed  成員指定的條目的個數。

32

位圖最大可以有 2^32  種顏色。如果結構體 BITMAPINFOHEADER  的成員 biCompression BI_RGB  ,則成員 bmiColors  NULL 。位圖數組中的一個 DWORD  代表一個像素中藍色,綠色和紅色的相對強度。 DWORD  中的最高一個字節沒有使用。 bmiColors  顏色表用於優化基於調色板設備的顏色,並且必須包含 BITMAPINFOHEADER  結構體的 biClrUsed 成員指定的條目的個數。

如果結構體 BITMAPINFOHEADER  的成員 biCompression    BI_BITFIELDS ,成員 bmiColors  包含三個 DWORD  顏色掩碼,分別用於指定一個像素中的紅色,綠色和藍色。

位圖數組中的一個 DWORD  代表一個像素。



biCompression
指定一個壓縮的自下而上的位圖(自上而下的DIB 不能被壓縮)的壓縮類型。該成員可以包含一個如下的值:

Value

Description

BI_RGB

一個未壓縮的格式。

BI_BITFIELDS

指定該位圖沒有被壓縮,並且顏色表中包含三個 DWORD  顏色掩碼,分別用於指定一個像素中的紅色,綠色和藍色。

該值對16-    32-bpp  位圖有效。

該值對WinCE 2.0 及以後版本有效。

BI_ALPHABITFIELDS

指定該位圖沒有被壓縮,並且顏色表中包含三個 DWORD  顏色掩碼,分別用於指定一個像素中的紅色,綠色,藍色和 alpha 組件。

該值對16-    32-bpp  位圖有效。

該值對WinCE 4.0 及以後版本有效。



你可以將上表中的任何一個值與BI_SRCPREROTATE  進行或,以指定源DIB 部分與目標部分有相同的轉角。
biSizeImage
指定image 的大小,以size 爲單位。
對於BI_RGB  位圖,該值可以設置爲0
biXPelsPerMeter
以每米中包含的像素的個數爲單位,指定目標設備中對於位圖的水平分辨率。
應用程序可以使用該值,從源組中選擇一個最佳匹配當前設備特性的位圖。
biYPelsPerMeter
以每米中包含的像素的個數爲單位,指定目標設備中對於位圖的垂直分辨率。
biClrUsed
指定顏色表中,位圖真正使用的顏色索引的個數。
如果該值爲 0 , 位圖使用成員 biCompression  指定的壓縮模式需要的,與成員 biBitCount  相應的最大的顏色數。
如果該值爲非 0 , 並且成員 biBitCount  小於 16 , 成員 biClrUsed  指定圖像引擎或者設備驅動真正使用的顏色數。
如果成員 biBitCount  大於 16 , 成員 biClrUsed  指定用於優化系統調色板性能的顏色表的大小。
如果成員 biBitCount  <span sty
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章