久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

AVI RIFF 文件參考手冊(cè)

 changqiong0606 2012-06-02

微軟的 AVI 文件格式是一種用于捕獲、編輯和回放 audio-video 序列的 RIFF 文件規(guī)范,??傮w上講,AVI 文件包含多個(gè)針對(duì)不同數(shù)據(jù)的流,。

大部分 AVI 序列使用 audio 和 video 流,。 一個(gè)簡(jiǎn)單的 AVI序列特例可以只包含 video 數(shù)據(jù)而不包含 audio 數(shù)據(jù)。

本部分并沒(méi)有介紹 OpenDML 對(duì)于 AVI 文件格式的擴(kuò)展,。如果要對(duì)其深入研究,, 請(qǐng)參考 OpenDML AVI M-JPEG 文件格式小組委員會(huì)出版的《OpenDML AVI File Format Extensions 》。

 

FOURCCs

 

一個(gè) FOURCC( four-character code,,4字符碼)是一個(gè)包含4個(gè)ASCII碼字符串的32位的無(wú)符號(hào)整型數(shù)據(jù),。例如,, 在 Little-Endian 系統(tǒng)中, 

FOURCC 'abcd' 表示為 0x64636261,。FOURCC中也可以包含空格,,如 ' abc' 也是一個(gè)有效的FOURCC。 AVI 文件使用 FOURCC碼標(biāo)示流的類型,、數(shù)據(jù)chunk,、index元素, 和其他的信息,。

 

RIFF 文件格式

 

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

  • RIFF 頭的格式:

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

    'RIFF'就是FOURCC'RIFF',。文件大小是一個(gè)表示文件中數(shù)據(jù)大小的4字節(jié)值。文件類型是一個(gè)FOURCC碼,,表示文件類型,。文件大小,

  • 包含的是文件類型以及其后數(shù)據(jù)的大小,,不包含FOURCC'RIFF'和文件大小本身所占的空間,。

  • 塊(chunk)的格式:

    ckID+ckSize+ckData

    其中, ckID是一個(gè)說(shuō)明該chunk中所包含的數(shù)據(jù)的FOURCC碼,。szSize 是表示 ckData 中數(shù)據(jù)大小的4字節(jié)數(shù)值,。ckData0個(gè)或多個(gè)字節(jié)的數(shù)據(jù),。

  • 數(shù)據(jù)總是填充到就近的WORD邊界,。ckSize表示的是chunk中有效數(shù)據(jù)的大小,,它不包括填充部分的大小,,以及ckIDckSize所占的空間,。

  • List 格式:

    'LSIT'+listSize+listType+listData

    'LIST'就是FOURCC'LIST',。listSize是表示list大小的4字節(jié)數(shù)值,。listType是一個(gè)FOURCC碼,。listData中是以任意順序排列的多個(gè)listchunk,。

  • listSize包含的是listTypelistData的大小,,而不包含FOURCC'LIST'和文件大小本身所占的空間。

 

本文的余下內(nèi)容,,將用以下符號(hào)表示 RIFF chunk

ckID ( ckData ),。

其中chunk大小的概念比較模糊。使用以上符號(hào),,一個(gè)list可以表示為:

'LIST' ( listType ( listData ) ),。

可選成員被放到了方括號(hào)中:[可選成員]

 

AVI RIFF Form

 

AVI 文件在 RIFF 頭中用 FOURCC 'AVI '標(biāo)示。所有的AVI文件都被強(qiáng)制要求包含兩個(gè)LIST 類型的chunk,分別定義了stream的格式和stream的數(shù)據(jù),。

一個(gè)AVI文件還可能包含一個(gè)index chunk,,其中包含了數(shù)據(jù)chunk在文件中的位置。包含以上部分的AVI文件的格式為:

RIFF ('AVI '
      LIST ('hdrl' ... )
      LIST ('movi' ... )
      ['idx1' (<AVI Index>) ]
     )
        'hdrl' list定義了數(shù)據(jù)的格式,,是第一個(gè)必須的LIST chunk,。'movi' list包含了AVI序列中的數(shù)據(jù),是第二個(gè)必須的LIST chunk,。
'idx1'list包含了index數(shù)據(jù),。這三部分在AVI文件中的順序是特定的。 注意:OpenDML 擴(kuò)展中定義了另外一種index,,用FOURCC'indx'進(jìn)行標(biāo)示,。 'hdrl' list'movi' list subchunk來(lái)表示它們的數(shù)據(jù)。 下面的例子列出了AVI RIFF文件的結(jié)構(gòu),, 其中的list需要包含相應(yīng)的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的開(kāi)頭部分是一個(gè)包含主AVI header 'avih' chunk。主header中包含了AVI 文件的一些全局信息,,
如:文件中包含多少個(gè)流,,
AVI序列的寬高等等。主header chunk的內(nèi)容可以用結(jié)構(gòu)體 AVIMAINHEADER 表示,。 AVI Stread Headers header 后面跟的是一個(gè)或多個(gè)'strl' list,。每一個(gè)數(shù)據(jù)流都需要有一個(gè)'strl' list。每一個(gè)'strl' list
都必須包含文件中一種流的信息,,并且必須包含該流的
header chunk('strh')format chunk('strf'),。另外,
一個(gè)
'strl' list還可能包含一個(gè)流的頭數(shù)據(jù)chunk'strd')和一個(gè)流的名稱chunk('strh'),。 流的header chunk ('strh')可以用結(jié)構(gòu)體 AVISTREAMHEADER 表示,。 流的format chunk('strf')一定要跟在header chunk的后面。Format chunk描述了流中數(shù)據(jù)的格式,。Format chunk中包含什么數(shù)據(jù),,
依賴于流的類型。對(duì)于
video流,,其中的數(shù)據(jù)是一個(gè)BITMAPINFO結(jié)構(gòu)體,,如果指定的話其中將包含一個(gè)調(diào)色板,。對(duì)于audio 流,,其中的數(shù)據(jù)是一個(gè)WAVEFORMATEX 結(jié)構(gòu)體。 如果包含流的header data chunk('strd'),,它將緊隨在流的format chunk('strf')之后,。其格式已經(jīng)包含的內(nèi)容由codec driver來(lái)定義。
通常情況下,
drivers使用其中的數(shù)據(jù)作為配置信息,。讀或者寫(xiě)AVI文件的應(yīng)用程序不需要解釋這些信息,,只需要作為一個(gè)內(nèi)存塊,傳給driver,,或者從driver處獲取,。 可選的'strn'chunk包含一個(gè)描述流的,以空字符為結(jié)尾的文本字符串,。 'hdrl'list中流的頭信息,,按照其中'strl'chunk的順序,與'movi'list中的流數(shù)據(jù)關(guān)聯(lián)起來(lái),。其中,,第一個(gè)'strl'chunk表示stream 0
第二個(gè)表示
stream 1,,以此類推,。 Stream Data ( 'movi' list ) 頭信息的后面,是一個(gè)包含流的真實(shí)數(shù)據(jù)的'movi'list,,這些數(shù)據(jù)包括視頻幀,、音頻采樣等。數(shù)據(jù)chunk 可以直接作為成員,,存在于'movi'list中,,
也可以組成一個(gè)
'rec 'list,整體作為一個(gè)成員,,存在于'movi'list中,。一個(gè)'rec 'list中包含的所有的chunk,應(yīng)該一次從磁盤(pán)中讀入到內(nèi)存,,
這樣是為了那些從磁盤(pán)交錯(cuò)播放的文件,。
一個(gè)數(shù)據(jù)chunkFOURCC碼,前兩個(gè)字節(jié)的數(shù)字信息,,用來(lái)說(shuō)明該chunk屬于哪個(gè)流,;后兩個(gè)字節(jié)的字符信息,說(shuō)明該chunk中數(shù)據(jù)的類型,。

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序列中定義一個(gè)新的調(diào)色板條目,。沒(méi)一個(gè) 改變調(diào)色板(palette-change
chunk( 'xxpc' )包含一個(gè)AVIPALCHANGE的結(jié)構(gòu)體,。如果一個(gè)流包含有調(diào)色板變更,,該流的AVISTREAMHEADER結(jié)構(gòu)體( strh )中的成員deFlags
會(huì)被設(shè)置AVISF_VIDEO_PALCHANGES 標(biāo)志。 文本流可以使用其他任意兩個(gè)字符的編碼,。 AVI Index Entries 可選的index chunk('idx1')可以跟在'movi'list的后面,。index包含了一個(gè)數(shù)據(jù)chunk和它們?cè)谖募形恢玫牧斜?/span>(list)。它包含一個(gè)
AVIOLDINDEX結(jié)構(gòu)體,,其中有針對(duì)每個(gè)數(shù)據(jù)chunk的條目,,也包括'rec 'chunk。如果文件包含了index,,AVIMAINHEADER結(jié)構(gòu)體( 'avih' )
中的成員
dwFlags需要被設(shè)置AVIF_HASINDEX 標(biāo)志,。 Other Data Chunks 如果需要,可以在數(shù)據(jù)中插入'JUNK'chunk,。應(yīng)用程序應(yīng)該忽略'JUNK'chunk所包含的內(nèi)容,。 ===============================相關(guān)結(jié)構(gòu)體======================================== ----------------AVIMAINHEADER結(jié)構(gòu)體------------------------

AVIMAINHEADER結(jié)構(gòu)體中定義了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

結(jié)構(gòu)體的大小,不包括開(kāi)頭 的8字節(jié),。

dwMicroSecPerFrame

指定幀之間的微秒數(shù),。此值表明本文件的總時(shí)間。

dwMaxBytesPerSec

指定文件的近似最大數(shù)據(jù)速率,。此值表明該系統(tǒng)每秒要處理的字節(jié)數(shù),,以表現(xiàn)一個(gè)AVI序列,正如在main header 和 stream header chunks 中其他參數(shù)指所指定的字節(jié)數(shù),。

dwPaddingGranularity

規(guī)定以字節(jié)為單位的數(shù)據(jù)對(duì)齊,。將數(shù)據(jù)以該值的整數(shù)倍進(jìn)行對(duì)齊。

dwFlags

包含0個(gè)或多個(gè)一下標(biāo)志的按位組合:

Value

Description

AVIF_COPYRIGHTED

表明AVI文件包含了版權(quán)數(shù)據(jù)和軟件,。如果設(shè)置了改標(biāo)志,,將不允許軟件對(duì)該數(shù)據(jù)進(jìn)行拷貝。

AVIF_HASINDEX

表明AVI文件包含一個(gè)index,。

AVIF_ISINTERLEAVED

表明AVI文件是交叉的,。

AVIF_MUSTUSEINDEX

表明應(yīng)用程序需要使用index,而不是物理上的順序,,來(lái)定義數(shù)據(jù)的展現(xiàn)順序,。例如,該標(biāo)志可以用于創(chuàng)建一個(gè)編輯用的幀列表,。

AVIF_WASCAPTUREFILE

表明該文件是一個(gè)用于捕獲實(shí)時(shí)視頻的,,而特別分配的AVI 文件。如果一個(gè)文件設(shè)置了該標(biāo)志,,在用戶寫(xiě)該文件之前,,應(yīng)用程序應(yīng)該發(fā)出警告,因?yàn)橛脩艨赡軙?huì)對(duì)該文件進(jìn)行碎片整理,。



AVIF_COPYRIGHTED

0x00020000

AVIF_HASINDEX

0x00000010

AVIF_ISINTERLEAVED

0x00000100

AVIF_MUSTUSEINDEX

0x00000020

AVIF_WASCAPTUREFILE

0x00010000

TRUSTCKTYPE

0x00000800



dwTotalFrames

指定本文件中包含的幀數(shù)據(jù)的總數(shù),。也就是指定文件中總共包含多少幀。

dwInitialFrames

指定交錯(cuò)文件中的初始幀,。非交錯(cuò)文件,,該參數(shù)應(yīng)該被設(shè)置為0。如果你正在創(chuàng)建一個(gè)交錯(cuò)文件,,在該參數(shù)中指定文件中,,AVI文件的初始幀之前,幀的數(shù)量,,

即文件中在初始幀前面還有多少幀,。

為了讓音頻驅(qū)動(dòng)有足夠的音頻去處理,交錯(cuò)文件中的音頻數(shù)據(jù)必須與視頻數(shù)據(jù)有一定的偏移,。通常情況下,,音頻數(shù)據(jù)必須前移足夠的幀,以使大約0.75秒的音頻數(shù)據(jù)被預(yù)裝,。

應(yīng)該將音頻數(shù)據(jù)中偏移的幀數(shù)設(shè)置到成員dwInitialRecords(未找到該成員,,懷疑應(yīng)該是dwInitialFrames)。音頻流header的結(jié)構(gòu)體AVISTREAMHEADERdwInitialFrames 成員,,

應(yīng)該被設(shè)置為同樣的值,。

dwStreams

指定文件中包含的流的數(shù)量。例如,,一個(gè)包含視頻和音頻數(shù)據(jù)的文件有兩個(gè)流,。

dwSuggestedBufferSize

指定讀該文件用的建議的緩存大小。一般來(lái)說(shuō),,該大小要足以包含文件中最大的數(shù)據(jù)塊(chunk),。如果該成員被設(shè)置為0,或者太小,,播放軟件在播放時(shí)就需要重新分配內(nèi)容,,

這將導(dǎo)致性能的下降。對(duì)于一個(gè)交叉文件,,該緩存大小應(yīng)該足以讀取一整條記錄(在movi list中,,有的數(shù)據(jù)以chunk的形式存在,有的數(shù)據(jù)以record即記錄的形式存在,,一個(gè)record 

多個(gè)chunk的組合),,而不是一個(gè)chunk

dwWidth

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

dwHeight

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

dwReserved

保留,,設(shè)置為0,。

Requirements

Header: Aviriff.h.

----------------AVISTREAMHEADER結(jié)構(gòu)體------------------------

AVISTREAMHEADER結(jié)構(gòu)體包含了AVI文件中一個(gè)流的相關(guān)信息。

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

指定一個(gè)FOURCC碼,,此處必須為'strh',。

cb

指定結(jié)構(gòu)體的大小,不包含開(kāi)頭的8字節(jié),,即fcccb所占的空間,。

fccType

包含一個(gè)標(biāo)識(shí)流中數(shù)據(jù)類型的FOURCC碼。針對(duì)視頻和音頻,,標(biāo)準(zhǔn)的AVI值定義如下:

FOURCC

Description

'auds'

Audio stream

'mids'

MIDI stream

'txts'

Text stream

'vids'

Video stream



fccHandler

該成員是可選的,,包含了一個(gè)FOURCC碼,用于標(biāo)識(shí)一個(gè)特定的數(shù)據(jù)處理程序,。該數(shù)據(jù)處理程序是該流的首選數(shù)據(jù)處理程序,。對(duì)于視頻流和音頻流來(lái)說(shuō),這是一個(gè)解碼流時(shí)用的編解碼器,。

dwFlags

包含數(shù)據(jù)流的所有標(biāo)志,。這些標(biāo)志的高位序字,具體到流中包含的數(shù)據(jù)類型(意思應(yīng)該是,,這些標(biāo)志的高位,,說(shuō)明了流的類型)。標(biāo)準(zhǔn)標(biāo)志定義如下:

AVISF_DISABLED

表明該流默認(rèn)情況下不被啟用,。

AVISF_VIDEO_PALCHANGES

表明該流中包含調(diào)色板變換,。該標(biāo)志提示播放軟件,它需要可變的調(diào)試板,。



wPriority

指定一種流的優(yōu)先級(jí),。例如,一個(gè)文件中包含了多個(gè)音頻流,,其中優(yōu)先級(jí)最高的可能會(huì)是默認(rèn)的流,。

wLanguage

Language tag.

dwInitialFrames

指定在交叉文件中,音頻流相對(duì)于視頻流要向前偏移多少,。通常情況下,,是大約0.75秒。如果你正在創(chuàng)建交叉文件,,在該成員中指定文件中,,AVI序列的初始幀之前,幀的數(shù)量,。詳細(xì)信息,,請(qǐng)參考AVIMAINHEADER結(jié)構(gòu)體中 dwInitialFrames 成員,。

dwScale

與 dwRate 一起,決定該流所要使用的時(shí)間尺度,。用dwScale 去除dwRate ,,得到一秒鐘樣本的數(shù)量。對(duì)于視頻流,,這就是幀率( fram rate ),。對(duì)于音頻流,,這個(gè)頻率相當(dāng)于播放nBlockAlign 個(gè)字節(jié)的音頻需要的時(shí)間,,對(duì)于PCM音頻,它只是采樣率,。

dwRate

參考dwScale.

dwStart

指定這個(gè)流開(kāi)始的時(shí)間,。其單位有主文件頭中的dwRate dwScale 成員定義(即其單位是dwRate/dwScale)。通常,,dwStart0,,但是它也可以為不與文件同時(shí)啟動(dòng)的流定義一個(gè)時(shí)間延遲。

dwLength

指定這個(gè)流的長(zhǎng)度,。單位由流的頭信息中的dwRate dwScale 來(lái)確定(即其單位是dwRate/dwScale),。(對(duì)于視頻流,dwLength就是流包含的總幀數(shù),;對(duì)于音頻流,,dwLength就是包含的block的數(shù)量,block是音頻解碼器能處理的原子單位),。dwLength/(dwRate/dwScale),,即dwLength * dwScale / dwRate,可以得到流的總時(shí)長(zhǎng),。

dwSuggestedBufferSize

指定讀該流時(shí)需要的緩存的大小,。通常情況下,這是一個(gè)與該流中最大的chunk的大小相對(duì)應(yīng)的值,。使用準(zhǔn)確的緩存大小,,可以提高播放器的性能。如果你不知道準(zhǔn)確的緩存大小,,可以設(shè)置為0,。

dwQuality

指定一個(gè)流數(shù)據(jù)的質(zhì)量指標(biāo)。該指標(biāo)是一個(gè)010,000的數(shù)值,。對(duì)于壓縮數(shù)據(jù),,這通常是一個(gè)作為質(zhì)量參數(shù)值傳給壓縮軟件的數(shù)值。如果該值為-1,,驅(qū)動(dòng)將使用默認(rèn)的質(zhì)量值,。

dwSampleSize

指定 一個(gè)數(shù)據(jù)樣本的大小,。如果樣本的大小可變,該成員將被設(shè)置為0,。如果該值為非0,,該文件中的多個(gè)樣本可以組成一個(gè)信號(hào)chunk。如果該值為0,,數(shù)據(jù)中的每個(gè)樣本(例如,,一個(gè)視頻幀)必須放在一個(gè)單獨(dú)的chunk中。對(duì)于視頻流,,該數(shù)值通常為0,,雖然當(dāng)所有的視頻幀都具有相同的大小時(shí),它也可以為非0,。對(duì)于音頻流,,該數(shù)值應(yīng)該和結(jié)構(gòu)體WAVEFORMATEX中的成員nBlockAlign一致。

rcFrame

指定一個(gè)在由AVI主頭結(jié)構(gòu)中的dwWidth 成員和dwHeight 成員決定的電影矩形中,,文本流或視頻流的目標(biāo)矩形,。rcFrame 成員通常用于支持多個(gè)視頻流。將該矩形設(shè)置為與電影矩形對(duì)應(yīng)的坐標(biāo),,以更新整個(gè)電影矩形,。該成員的單位是像素。目標(biāo)矩形的左上角與電影矩形的左上角關(guān)聯(lián),。

Remarks

該結(jié)構(gòu)體的部分成員在結(jié)構(gòu)體AVIMAINHEADER中也存在,。AVIMAINHEADER中的數(shù)據(jù)是針對(duì)整個(gè)文件的,AVISTREAMHEADER中的數(shù)據(jù)是針對(duì)單個(gè)流的,。

Requirements

Header: Aviriff.h.

----------------BITMAPINFO結(jié)構(gòu)體------------------------
BITMAPINFO結(jié)構(gòu)體定義了一個(gè)基于windowsDIB(device-independent bitmap)的尺寸和顏色信息,。

Syntax

typedef struct tagBITMAPINFO { 
  BITMAPINFOHEADER bmiHeader; 
  RGBQUAD bmiColors[1]; 
} BITMAPINFO;

Members

bmiHeader
指定一個(gè)包含尺寸和顏色格式信息的位圖信息頭結(jié)構(gòu)體。使用BITMAPINFOHEADER結(jié)構(gòu)體,。
bmiColors
包含下列之一:
  • 一個(gè)RGBQUAD結(jié)構(gòu)體的數(shù)組,。其成員構(gòu)成顏色表。
  • 一個(gè)指定當(dāng)前實(shí)現(xiàn)了的邏輯調(diào)色板中 的索引的16位無(wú)符號(hào)整型,。
    使用DIB的函數(shù)允許使用bmiColors 的這種用法,。如果bmiColors 包含了一個(gè)已實(shí)現(xiàn)的邏輯調(diào)色板的索引,它們必須調(diào)用如下的位圖函數(shù):CreateDIBPatternBrushPt和 CreateDIBSection,。CreateDIBSection 函數(shù)的參數(shù)iUsage 必須被設(shè)置為DIB_PAL_COLORS ,。
    其中條目的個(gè)數(shù)依賴于BITMAPINFOHEADER 結(jié)構(gòu)體中的biBitCount biClrUsed成員。
    bmiColors 表中的顏色按重要性進(jìn)行排列,。詳細(xì)信息,,請(qǐng)參考:Remarks
  • 如果bmiHeader.biCompression 被設(shè)置為了BI_RGB ,你可以將bmiColors 數(shù)組的大小設(shè)置為0,。

Remarks

一個(gè)設(shè)備無(wú)關(guān)的位圖包含兩個(gè)不同的部分:一個(gè)描述位圖尺寸和顏色的BITMAPINFO結(jié)構(gòu)體,,和一個(gè)定義位圖像素的字節(jié)數(shù)組。數(shù)組中的數(shù)據(jù)排列在一起,,但是必須用0將每個(gè)掃描行與LONG類型邊界對(duì)齊,。

如果位圖的高是正數(shù),則該位圖是一個(gè)自下而上的DIP,,并且它是以左下角起始的,。

如果位圖的高是負(fù)數(shù),則該位圖是一個(gè)自上而下的DIP,,并且它是以左上角起始的,。

當(dāng)一個(gè)位圖緊跟在BITMAPINFO 之后時(shí),該位圖將被打包,。打包的位圖通過(guò)一個(gè)指針進(jìn)行引用,。

對(duì)于打包位圖,,當(dāng)使用DIB_PAL_COLORS 模式時(shí),,BITMAPINFOHEADER 結(jié)構(gòu)體的ClrUsed 必須被設(shè)置為一個(gè)偶數(shù),這樣DIB位圖數(shù)組將從DWORD邊界上開(kāi)始,。

如果一個(gè)位圖保存在文件中,,或者將要傳送給其他應(yīng)用程序,bmiColors 成員不應(yīng)該保護(hù)調(diào)色板索引,。

位圖的顏色表應(yīng)保護(hù)明確的RGB數(shù)值,,除非這個(gè)應(yīng)用程序獨(dú)占使用和控制該位圖。

Security Note   包括無(wú)效格式描述的普通級(jí)別的錯(cuò)誤,,可以在內(nèi)容(哪兒,?)中找到。例如,,顏色表可以跟在BITMAPINFOHEADER 結(jié)構(gòu)體后面,。

BITMAPINFO 結(jié)構(gòu)體由一個(gè)BITMAPINFOHEADER 結(jié)構(gòu)體以及一個(gè)跟在其后面的RGBQUAD 數(shù)值數(shù)組構(gòu)成。數(shù)組的大小由BITMAPINFOHEADER結(jié)構(gòu)體的成員biClrUsed 決定,。

在驗(yàn)證分配給BITMAPINFO 結(jié)構(gòu)體的buffer的大小之前,,不要將一個(gè)顏色表拷貝到BITMAPINFO 結(jié)構(gòu)體。

Requirements

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

----------------BITMAPINFOHEADER結(jié)構(gòu)體------------------------
(以下的解釋來(lái)自:http://msdn.microsoft.com/en-us/library/dd183376(VS.85).aspx,。后面還會(huì)有一個(gè)對(duì)該結(jié)構(gòu)體的說(shuō)明,,與此稍有不同。)
該結(jié)構(gòu)體包含了一個(gè)DIB(device-independent bitmap)尺寸和顏色個(gè)數(shù)的信息,。

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
指定結(jié)構(gòu)體的大小,,以字節(jié)為單位。
該大小不包含biClrUsed 成員中提到的顏色表或者屏蔽位的大小,。
詳細(xì)請(qǐng)參考Remarks ,。
biWidth
指定位圖的寬,,以像素為單位。
biHeight
指定位圖的高,,以像素為單位,。
如果biHeight 為正值,則該位圖是一個(gè)自下而上的DIB,,并且它從左下角開(kāi)始,。
如果biHeight 為負(fù)值,則該位圖是一個(gè)自上而下的DIB,,并且它從左上角開(kāi)始,。
如果biHeight 為負(fù)值,表明了一個(gè)自上而下的DIB,,此時(shí),,biCompression 必須被設(shè)置為BI_RGB 或者 BI_BITFIELDS。自上而下的DIB不能被壓縮,。
biPlanes
指定目標(biāo)設(shè)備平面層(plane)的個(gè)數(shù),。
該值必須被設(shè)置為1
biBitCount
指定一個(gè)像素所占的位數(shù),。
BITMAPINFOHEADER 結(jié)構(gòu)體的biBitCount 成員決定了一個(gè)像素占幾個(gè)位,,以及位圖中包含的最大的顏色數(shù)。
該成員只能包含一個(gè)如下的值:

Value

Description

1

說(shuō)明該位圖是一個(gè)黑白的,,bmiColors 成員包含兩個(gè)條目,。

在該位圖中,每一位代表一個(gè)像素,。

如果該位為0,, 則該像素用bmiColors 表中的第一個(gè)條目中的顏色進(jìn)行顯示。

如果該位為1,, 則該像素用bmiColors 表中的第二個(gè)條目中的顏色進(jìn)行顯示,。

2

位圖可以有4種顏色值。

4

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

位圖中的每一個(gè)像素,由顏色表中的一個(gè)4位的索引進(jìn)行表示,。

例如,,如果位圖中的第一個(gè)字節(jié)為 0x1F,該字節(jié)表示兩個(gè)像素,。第一個(gè)像素包含表中的第二個(gè)條目的顏色,,第二個(gè)像素包含表中第16個(gè)條目的顏色。

8

位圖最大可以有256種顏色,bmiColors 成員包含256個(gè)條目,。在這種情況下,,數(shù)組中的每一個(gè)字節(jié)標(biāo)示一個(gè)像素。

16

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

如果BITMAPINFOHEADER 結(jié)構(gòu)體的biCompression 成員為BI_RGB ,,則bmiColors 成員NULL 

該位圖中,,每一個(gè)字代表一個(gè)像素,。紅色,綠色和藍(lán)色的相對(duì)強(qiáng)度,,由每個(gè)顏色組件的5個(gè)位來(lái)表示,。

對(duì)應(yīng)藍(lán)色的值,在最低的5個(gè)位,,其后是分別對(duì)應(yīng)綠色和紅色的各5位,。

最高的一位沒(méi)有使用。bmiColors 顏色表用于優(yōu)化基于調(diào)色板設(shè)備的顏色,,并且必須包含BITMAPINFOHEADER 結(jié)構(gòu)體的biClrUsed 成員指定的條目的個(gè)數(shù),。

24

位圖最大可以有2^24 種顏色,并且bmiColors 成員為NULL,。

位圖數(shù)組中的每三個(gè)字節(jié),,表示一個(gè)像素中藍(lán)色,,綠色和紅色的相對(duì)強(qiáng)度,。

bmiColors 顏色表用于優(yōu)化基于調(diào)色板設(shè)備的顏色,并且必須包含BITMAPINFOHEADER結(jié)構(gòu)體的biClrUsed 成員指定的條目的個(gè)數(shù),。

32

位圖最大可以有2^32 種顏色,。如果結(jié)構(gòu)體BITMAPINFOHEADER 的成員biCompressionBI_RGB ,則成員bmiColors NULL,。位圖數(shù)組中的一個(gè)DWORD 代表一個(gè)像素中藍(lán)色,,綠色和紅色的相對(duì)強(qiáng)度。DWORD 中的最高一個(gè)字節(jié)沒(méi)有使用,。bmiColors 顏色表用于優(yōu)化基于調(diào)色板設(shè)備的顏色,,并且必須包含BITMAPINFOHEADER 結(jié)構(gòu)體的biClrUsed成員指定的條目的個(gè)數(shù)。

如果結(jié)構(gòu)體BITMAPINFOHEADER 的成員biCompression 為 BI_BITFIELDS,,成員bmiColors 包含三個(gè)DWORD 顏色掩碼,,分別用于指定一個(gè)像素中的紅色,綠色和藍(lán)色,。

位圖數(shù)組中的一個(gè)DWORD 代表一個(gè)像素,。



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

Value

Description

BI_RGB

一個(gè)未壓縮的格式。

BI_BITFIELDS

指定該位圖沒(méi)有被壓縮,,并且顏色表中包含三個(gè)DWORD 顏色掩碼,,分別用于指定一個(gè)像素中的紅色,綠色和藍(lán)色,。

該值對(duì)16- 和 32-bpp 位圖有效,。

該值對(duì)WinCE 2.0及以后版本有效。

BI_ALPHABITFIELDS

指定該位圖沒(méi)有被壓縮,,并且顏色表中包含三個(gè)DWORD 顏色掩碼,,分別用于指定一個(gè)像素中的紅色,綠色,,藍(lán)色和alpha組件,。

該值對(duì)16- 和 32-bpp 位圖有效。

該值對(duì)WinCE 4.0及以后版本有效,。



你可以將上表中的任何一個(gè)值與BI_SRCPREROTATE 進(jìn)行或,,以指定源DIB部分與目標(biāo)部分有相同的轉(zhuǎn)角。
biSizeImage
指定image的大小,,以size為單位,。
對(duì)于BI_RGB 位圖,該值可以設(shè)置為0,。
biXPelsPerMeter
以每米中包含的像素的個(gè)數(shù)為單位,,指定目標(biāo)設(shè)備中對(duì)于位圖的水平分辨率。
應(yīng)用程序可以使用該值,,從源組中選擇一個(gè)最佳匹配當(dāng)前設(shè)備特性的位圖,。
biYPelsPerMeter
以每米中包含的像素的個(gè)數(shù)為單位,指定目標(biāo)設(shè)備中對(duì)于位圖的垂直分辨率,。
biClrUsed
指定顏色表中,,位圖真正使用的顏色索引的個(gè)數(shù)。
如果該值為0,, 位圖使用成員biCompression 指定的壓縮模式需要的,,與成員biBitCount 相應(yīng)的最大的顏色數(shù)。
如果該值為非0,, 并且成員biBitCount 小于16,, 成員biClrUsed 指定圖像引擎或者設(shè)備驅(qū)動(dòng)真正使用的顏色數(shù)。
如果成員biBitCount 大于16,, 成員biClrUsed 指定用于優(yōu)化系統(tǒng)調(diào)色板性能的顏色表的大小,。
如果成員biBitCount <span sty

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多