6.2 GIF文件格式
6.2.1 簡(jiǎn)介
GIF(Graphics Interchange Format)是CompuServe公司開(kāi)發(fā)的圖像文件存儲(chǔ)格式,1987年開(kāi)發(fā)的GIF文件格式版本號(hào)是GIF87a,1989年進(jìn)行了擴(kuò)充,擴(kuò)充后的版本號(hào)定義為GIF89a。
GFI圖像文件以數(shù)據(jù)塊(block)為單位來(lái)存儲(chǔ)圖像的相關(guān)信息。一個(gè)GIF文件由表示圖形/圖像的數(shù)據(jù)塊、數(shù)據(jù)子塊以及顯示圖形/圖像的控制信息塊組成,稱(chēng)為GIF數(shù)據(jù)流(Data Stream)。數(shù)據(jù)流中的所有控制信息塊和數(shù)據(jù)塊都必須在文件頭(Header)和文件結(jié)束塊(Trailer)之間。
GIF文件格式采用了LZW(Lempel-Ziv Walch)壓縮算法來(lái)存儲(chǔ)圖像數(shù)據(jù),定義了允許用戶(hù)為圖像設(shè)置背景的透明(transparency)屬性。此外,GIF文件格式可在一個(gè)文件中存放多幅彩色圖形/圖像。如果在GIF文件中存放有多幅圖,它們可以像演幻燈片那樣顯示或者像動(dòng)畫(huà)那樣演示。
6.2.2. 文件結(jié)構(gòu)
GIF文件結(jié)構(gòu)的典型結(jié)構(gòu)如圖6-01所示。為下文說(shuō)明方便,在構(gòu)件左邊加了編號(hào)。
1 |
Header |
|
GIF文件頭 |
|
2 |
Logical Screen Descriptor |
|
邏輯屏幕描述塊 |
|
3 |
Global Color Table |
|
全局彩色表 |
|
|
… 擴(kuò)展模塊(任選) … |
|
|
|
4 |
Image Descriptor |
|
圖形描述塊 |
|
5 |
Local Color Table |
|
局部彩色表(可重復(fù)n次) |
可 |
6 |
Table Based Image Data |
|
表式壓縮圖像數(shù)據(jù) |
重 |
7 |
Graphic Control Extension |
|
圖像控制擴(kuò)展塊 |
復(fù) |
8 |
Plain Text Extension |
|
無(wú)格式文本擴(kuò)展塊 |
n |
9 |
Comment Extension |
|
注釋擴(kuò)展塊 |
個(gè) |
10 |
Applicaton Extension |
|
應(yīng)用程序擴(kuò)展塊 |
|
|
… 擴(kuò)展模塊(任選) … |
|
|
|
11 |
GIF Trailer |
|
GIF文件結(jié)束塊 |
|
圖6-01 GIF文件結(jié)構(gòu)
數(shù)據(jù)塊可分成3類(lèi):控制塊(Control Block),圖形描繪塊(Graphic-Rendering Block)和專(zhuān)用塊(Special Purpose Block)。
(1) 控制塊:控制塊包含有用來(lái)控制數(shù)據(jù)流(Data Stream)或者設(shè)置硬件參數(shù)的信息,其成員包括:
- GIF文件頭(Header)
- 邏輯屏幕描述塊(Logical Screen Descriptor)
- 圖形控制擴(kuò)展塊(Graphic Control Extension)
- 文件結(jié)束塊(Trailer)
(2) 圖形描繪塊:包含有用來(lái)描繪在顯示設(shè)備上顯示圖形的信息和數(shù)據(jù),其成員包括:
- 圖像描述塊(Image Descriptor)
- 無(wú)格式文本擴(kuò)展塊(Plain Text Extension)
(3) 特殊用途數(shù)據(jù)塊;包含有與圖像處理無(wú)關(guān)的信息,其成員包括:
- 注釋擴(kuò)展塊(Comment Extension)
- 應(yīng)用擴(kuò)展塊(Application Extension)
除了在控制塊中的邏輯屏幕描述塊(Logical Screen Descriptor)和全局彩色表(Global Color Table)的作用范圍是整個(gè)數(shù)據(jù)流(Data Stream)之外, 所有其他控制塊僅控制跟在它們后面的圖形描繪塊。
6.2.3 構(gòu)件詳解
1. GIF文件頭
文件頭描述塊(Header)定義GIF數(shù)據(jù)流(GIF Data Stream),它的結(jié)構(gòu)如圖6-02所示。文件頭描述塊(Header)由GIF標(biāo)記域(Signature)和版本號(hào)(Version)域組成,是一個(gè)由6個(gè)固定字節(jié)組成的數(shù)據(jù)塊,它們用來(lái)說(shuō)明使用的文件格式是GIF格式及當(dāng)前所用的版本號(hào)。GIF標(biāo)記域(Signature)存放的是“GIF”,版本號(hào)域存放的是1987年5月發(fā)布的“87a”或者1989年7月發(fā)布的“89a”,或者更加新的版本號(hào)。
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
字節(jié)號(hào) |
域的名稱(chēng) |
數(shù)據(jù)類(lèi)型 |
|
0 |
|
|
Signature |
1 |
GIF標(biāo)記 |
3 Bytes |
|
2 |
|
|
|
3 |
|
|
Version |
4 |
版本號(hào) |
3 Bytes |
|
5 |
|
|
圖6-02 標(biāo)記/版本數(shù)據(jù)塊的結(jié)構(gòu)
2. 邏輯屏幕描述塊
邏輯屏幕描述塊(Logical Screen Descriptor)包含定義圖像顯示區(qū)域的參數(shù),包括背景顏色信息。這個(gè)數(shù)據(jù)塊中的坐標(biāo)相對(duì)于虛擬屏幕的左上角,不一定是指顯示屏的絕對(duì)坐標(biāo),這就意味可以參照窗口軟件環(huán)境下的窗口坐標(biāo)或者打印機(jī)坐標(biāo)來(lái)設(shè)計(jì)圖像顯示程序。邏輯屏幕描述塊的結(jié)構(gòu)如圖6-03所示:
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
字節(jié)號(hào) |
域的名稱(chēng) |
類(lèi)型 |
Logical Screen Width |
0 |
邏輯屏幕寬度 |
Unsigned |
|
1 |
(以像素為定單位) |
|
Logical Screen Height |
2 |
邏輯屏幕高度 |
Unsigned |
|
3 |
(以像素為定單位) |
|
G |
CR |
S |
Size |
4 |
包裝域 |
見(jiàn)圖6-04 |
Background Color Index |
5 |
背景顏色索引 |
Byte |
Pixel Aspect Ratio |
6 |
像素寬高比 |
Byte |
圖6-03 屏幕描述塊的結(jié)構(gòu)
邏輯描述塊包含7個(gè)字節(jié)。字節(jié)0和字節(jié)1用來(lái)說(shuō)明邏輯顯示屏的寬度,字節(jié)3和字節(jié)4用來(lái)說(shuō)明邏輯顯示屏的高度,字節(jié)4用來(lái)描述彩色表的屬性,字節(jié)5用來(lái)指定背景顏色索引,字節(jié)6用來(lái)計(jì)算像素的寬高比。現(xiàn)作如下說(shuō)明:
(1) 屏幕描述塊中的第5個(gè)字節(jié)稱(chēng)為包裝域(Packed Fields),它的位結(jié)構(gòu)如圖6-04所示,它由4個(gè)子域組成:
① 全局彩色表標(biāo)志(Global Color Table Flag )域G用來(lái)說(shuō)明是否有全局彩色表存在。如果G=1,表示有一個(gè)全局彩色表(Global Color Table)將緊跟在這個(gè)邏輯屏幕描述塊(Logical Screen Descriptor)之后;這個(gè)標(biāo)志也用來(lái)選擇背景顏色索引(Background Color Index)。如果G=1,背景顏色索引(Background Color Index)域中的值就用作背景顏色的索引。
② 彩色分辨率(Color Resolution)域CR用來(lái)表示原始圖像可用的每種基色的位數(shù)(實(shí)際值減1)。這個(gè)位數(shù)表示整個(gè)調(diào)色板的大小,而不是這幅圖像使用的實(shí)際的顏色數(shù)。例如,如果該域的值CR=3,說(shuō)明原始圖像可用每個(gè)基色有4位的調(diào)色板來(lái)生成彩色圖像。
③ 彩色表排序標(biāo)志(Sort Flag)域S用來(lái)表示全局彩色表(Global Color Table)中的顏色是否按重要性(或者稱(chēng)使用率)排序。如果S=0,表示沒(méi)有重要性排序;如果S=1表示最重要的顏色排在前。這樣做的目的是輔助顏色數(shù)比較少的解碼器能夠選擇最好的顏色子集,在這種情況下解碼器就可選擇彩色表中開(kāi)始段的彩色來(lái)顯示圖像。
④ 全局彩色表大小(Size of Global Color Table)域Size表示表示每個(gè)像素的位數(shù),它用來(lái)計(jì)算全局彩色表(Global Color Table)中包含的字節(jié)數(shù)。在全局彩色表標(biāo)志(Global Color Table Flag)域G=0時(shí)就不需要計(jì)算,G=1時(shí)就要計(jì)算彩色表的大小,具體計(jì)算見(jiàn)下文的“3. 全局彩色表”。
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Global Color Table Flag |
Color Resolution |
Sort Flag |
Size of Global Color Table |
圖6-04 邏輯屏幕描述塊中的包裝域結(jié)構(gòu)
(2) 屏幕描述塊中的第6個(gè)字節(jié)是背景顏色索引(Background Color Index),它是彩色表的一個(gè)索引值,用來(lái)指定背景顏色。如果全局彩色表標(biāo)志(Global Color Table Flag)域G=0,這個(gè)域的值也設(shè)置為0。
(3) 像素寬高比(Pixel Aspect Ratio)域中的值是一個(gè)因數(shù),是計(jì)算原始圖像像素的寬高比的一個(gè)近似值。如果該域的值范圍為1~255,如果不等于0,寬高比的近似值按下式計(jì)算:
Aspect Ratio = (Pixel Aspect Ratio + 15) / 64
像素寬高比(Pixel Aspect Ratio)定義成像素的寬度與高度之比,比值的范圍在4:1~1:4之間,其增量為1/64。
3. 全局彩色表
由于一個(gè)GIF文件可以包含多幅彩色圖像,每幅彩色圖像也許都包含適合自身特點(diǎn)的彩色表,所以一個(gè)GIF文件可以有好幾個(gè)彩色表。但歸納起來(lái)只有兩類(lèi):全局彩色表(Global Color Table)或局部彩色表(Local Color Table)。全局彩色表可用于圖像本身沒(méi)有帶彩色表的所有圖像和無(wú)格式文本擴(kuò)展塊(Plain Text Extension),而局部彩色表只用于緊跟在它后面的一幅圖像。在處理全局彩色表和局部彩色表時(shí)需要注意下面一些規(guī)則。
① 如果GIF文件包含全局彩色表(Global Color Table),而且要顯示的圖像本身又帶有局部彩色表,那末顯示該幅彩色圖像時(shí)就用它自己的彩色表,而不用全局彩色表。在這種情況下,解碼器就首先保存全局彩色表(Global Color Table),然后使用局部彩色表(Local Color Table)來(lái)顯示圖像,最后再回復(fù)全局彩色表(Global Color Table)。
② 全局彩色表(Global Color Table)和局部彩色表(Local Color Table)都是可選擇的。由于這個(gè)原因,解碼器最好要保存全局彩色表(Global Color Table),一直到出現(xiàn)另一個(gè)全局彩色表(Global Color Table)為止。這樣做之后,對(duì)于包含完全沒(méi)有彩色表的一幅或者多幅彩色圖像的GIF文件就可以使用最后保存的全局彩色表(Global Color Table)進(jìn)行處理。
③ 如果同類(lèi)型的圖像能夠使用相同的彩色表來(lái)顯示,編碼器就要盡可能使用一個(gè)全局彩色表(Global Color Table);如果沒(méi)有彩色表可用,解碼器就可以使用計(jì)算機(jī)系統(tǒng)提供的彩色表或者解碼器自身的彩色表。
④ 全局彩色表(Global Color Table)存在與否由邏輯屏幕描述塊(Logical Screen Descriptor)中字節(jié)5的全局彩色表標(biāo)志(Global Color Table Flag )域G的值確定。如果存在,彩色表就緊跟在邏輯屏幕描述塊(Logical Screen Descriptor)之后。彩色表的表項(xiàng)數(shù)目等于2(n +1),其中n=b2b1b0,每個(gè)表項(xiàng)由3個(gè)字節(jié)組成,分別代表R、G、B的相對(duì)強(qiáng)度,因此彩色表的字節(jié)數(shù)就等于3×2(n +1)。彩色表的結(jié)構(gòu)如圖6-05所示。
7 6 5 4 3 2 1 0 |
字節(jié)號(hào) |
域的名稱(chēng) |
數(shù)據(jù)類(lèi)型 |
red intensity |
0 |
紅色索引 000 |
Byte |
green intensity |
1 |
綠色索引 000 |
Byte |
blue intensity |
2 |
藍(lán)色索引 000 |
Byte |
red intensity |
3 |
紅色索引 001 |
Byte |
green intensity |
4 |
綠色索引 001 |
Byte |
blue intensity |
5 |
藍(lán)色索引 001 |
Byte |
… |
… |
… |
|
… |
… |
… |
|
red intensity |
745 |
紅色索引 255 |
Byte |
green intensity |
746 |
綠色索引 255 |
Byte |
blue intensity |
767 |
藍(lán)色索引 255 |
Byte |
圖6-05 彩色表結(jié)構(gòu)
局部彩色表與全局彩色表有相同的存儲(chǔ)格式。
4. 圖像描述塊
GIF圖像文件格式可包含數(shù)量不限的圖像,而且也沒(méi)有一個(gè)固定的存放順序,僅用一個(gè)字節(jié)的圖像分隔符(Image Separator)來(lái)判斷是不是圖像描述塊。每一幅圖像都由一個(gè)圖像描述塊(Image Descriptor)、可有可無(wú)的局部彩色表(Local Color Table)和圖像數(shù)據(jù)組成。每幅圖像必須要落在邏輯屏幕描述塊(Logical Screen Descriptor)中定義的邏輯屏(Logical Screen)尺寸范圍里。
圖像描述塊(Image Descriptor)之前可以有一個(gè)或者多個(gè)控制塊,例如圖形控制擴(kuò)展塊(Graphic Control Extension),其后可以跟著一個(gè)局部彩色表(Local Color Table)。無(wú)論前后是否有各種數(shù)據(jù)塊,圖像描述塊(Image Descriptor)總是帶有圖像數(shù)據(jù)。
圖像描述塊(Image Descriptor)的結(jié)構(gòu)如圖6-06所示。
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
字節(jié)號(hào) |
域的名稱(chēng) |
類(lèi)型 |
Image Separator |
0 |
圖像分隔符 |
Byte |
Image Left Position |
1 |
圖像左邊位置 |
Unsigned |
|
2 |
(以像素為定單位) |
|
Image Top Position |
3 |
圖像頂部位置 |
Unsigned |
|
4 |
(以像素為定單位) |
|
Image Width |
5 |
圖像寬度 |
Unsigned |
|
6 |
(以像素為定單位) |
|
Image Height |
7 |
圖像高度 |
Unsigned |
|
8 |
(以像素為定單位) |
|
|
9 |
包裝域 |
見(jiàn)圖6-07 |
圖6-06 圖像描述塊的結(jié)構(gòu)
在圖6-06中,圖像分隔符(Image Separator)用來(lái)標(biāo)識(shí)圖像描述塊的開(kāi)始,該域包含固定的值:0x2C;圖像左邊位置(Image Left Position)是相對(duì)于邏輯屏幕(Logical Screen)最左邊的列號(hào),邏輯屏幕最左邊的列好定義為0;圖像頂部位置(Image Top Position) 是相對(duì)于邏輯屏幕(Logical Screen)頂部的行號(hào),邏輯屏幕頂部的行號(hào)定義為0。
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Local Color Table Flag |
Interlace Flag |
Sort Flag |
Reserved |
Size of Local Color Table |
圖6-07 圖像描述塊中的包裝域結(jié)構(gòu)
圖像描述塊(Image Descriptor)中的第9個(gè)字節(jié)稱(chēng)為包裝域(Packed Fields)字節(jié),它的位結(jié)構(gòu)如圖6-07所示,它由5個(gè)子域組成:
① 局部彩色表標(biāo)志(Local Color Table Flag )域L用來(lái)說(shuō)明是否有局部彩色表存在。如果L=1,表示有一個(gè)局部彩色表(Local Color Table)將緊跟在這個(gè)圖像描述塊(Image Descriptor)之后;如果G=0,表示圖像描述塊(Image Descriptor)后面沒(méi)有局部彩色表(Local Color Table),該圖像要使用全局彩色表(Global Color Table)。
② 交插顯示標(biāo)志(Interlace Flag)域I用來(lái)表示該圖像是不是交插圖像(Interlaced Images)。如果I=0,表示該圖像不是交插圖像,如果I=1表示該圖像是交插圖像。使用該位標(biāo)志可知道圖像數(shù)據(jù)是如何存放的。GIF文件格式定義了兩種數(shù)據(jù)存儲(chǔ)方式:一種是按圖像行連續(xù)順序存儲(chǔ),這個(gè)順序與顯示器上顯示行的順序相同;另一種按交插方式存儲(chǔ)。交插圖像按行分成如下所示的4組(Group):
Group 1:每隔8行組成一組,從第0行開(kāi)始顯示 /第1遍交插
Group 2:每隔8行組成一組,從第4行開(kāi)始顯示 /第2遍交插
Group 3:每隔4行組成一組,從第2行開(kāi)始顯示 /第3遍交插
Group 4:每隔2行組成一組,從第1行開(kāi)始顯示 /第4遍交插
由于顯示圖像需要較長(zhǎng)的時(shí)間,使用這種方法存放和顯示圖像數(shù)據(jù),人們就可以在圖像顯示完成之前看到這幅圖像的概貌,而不覺(jué)得顯示時(shí)間長(zhǎng)。圖6-08說(shuō)明了這種交插圖像的存儲(chǔ)和顯示順序。
行號(hào) |
像 點(diǎn) |
交插遍次 |
0 |
…………………………………… |
1 |
|
|
|
1 |
…………………………………… |
|
|
|
4 |
2 |
…………………………………… |
|
|
3 |
|
3 |
…………………………………… |
|
|
|
4 |
4 |
…………………………………… |
|
2 |
|
|
5 |
…………………………………… |
|
|
|
4 |
6 |
…………………………………… |
|
|
3 |
|
7 |
…………………………………… |
|
|
|
4 |
8 |
…………………………………… |
1 |
|
|
|
9 |
…………………………………… |
|
|
|
4 |
10 |
…………………………………… |
|
|
3 |
|
11 |
…………………………………… |
|
|
|
4 |
12 |
…………………………………… |
|
2 |
|
|
13 |
…………………………………… |
|
|
|
4 |
14 |
…………………………………… |
|
|
3 |
|
15 |
…………………………………… |
|
|
|
4 |
16 |
…………………………………… |
1 |
|
|
|
17 |
…………………………………… |
|
|
|
4 |
18 |
…………………………………… |
|
|
3 |
|
19 |
…………………………………… |
|
|
|
4 |
圖6-08 交插圖像顯示順序
③ 彩色表排序標(biāo)志(Sort Flag)域的含義與全局彩色表(Global Color Table)中(Sort Flag)域的含義相同。
④ 保留(Reserved)。
⑤ 局部彩色表大小(Size of Local Color Table)域的值用來(lái)計(jì)算局部彩色表(Global Color Table)中包含的字節(jié)數(shù)。
5. 局部彩色表
局部彩色表(Local Color Table)用于緊跟在它后面的圖像。彩色表是否存在取決于圖像描述塊(Image Descriptor)中局部彩色表標(biāo)志(Local Color Table Flag)位的設(shè)置。彩色表的結(jié)構(gòu)和大小與全局彩色表(Global Color Table)完全相同。
6. 表基圖像數(shù)據(jù)
GIF圖像采用了LZW算法對(duì)實(shí)際的圖像數(shù)據(jù)進(jìn)行壓縮。為了提高壓縮編碼的效率,對(duì)LZW編碼器輸出的代碼采用可變長(zhǎng)度碼VLC(variable-length-code),不是用位數(shù)高度的代碼來(lái)表示輸出,而且代表碼字的位數(shù)是可變的。
表基圖像數(shù)據(jù)(Table Based Image Data)由LZW最小代碼長(zhǎng)度(LZW Minimum Code Size)和圖像數(shù)據(jù)(Image Data)組成,如圖6-09所示。LZW最小代碼長(zhǎng)度域的值用來(lái)確定圖像數(shù)據(jù)中LZW代碼使用的初始位數(shù)。圖像數(shù)據(jù)(Image Data)由數(shù)據(jù)子塊(Data Sub-blocks)序列組成。
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
域的名稱(chēng) |
類(lèi)型 |
LZW Minimum Code Size |
|
LZW最小代碼長(zhǎng)度
|
Byte |
Image Data
|
|
圖像數(shù)據(jù) |
Data Sub-blocks |
圖6-09 圖像數(shù)據(jù)的存儲(chǔ)格式
數(shù)據(jù)子塊(Data Sub-blocks)的結(jié)構(gòu)如圖6-10所示,這是一個(gè)可變長(zhǎng)度的數(shù)據(jù)塊,其長(zhǎng)度由塊大小域(Block Size)域中的值確定,字節(jié)數(shù)在0~255之間。
7 6 5 4 3 2 1 0 |
字節(jié)號(hào) |
域的名稱(chēng) |
數(shù)據(jù)類(lèi)型 |
Block Size |
0 |
塊大小 |
Byte |
|
1 |
|
Byte |
|
|
|
Byte |
Data Values |
|
數(shù)值 |
Byte |
|
|
|
Byte |
|
… |
|
… |
|
… |
|
… |
|
|
|
Byte |
|
多 |
|
Byte |
|
到 |
|
Byte |
|
255 |
|
Byte |
圖6-10 數(shù)據(jù)子塊的結(jié)構(gòu)
7. 圖形控制擴(kuò)展塊
圖形控制擴(kuò)展塊(Graphic Control Extension)包含處理圖形描繪塊時(shí)要使用的參數(shù),它的結(jié)構(gòu)如圖6-11所示。現(xiàn)說(shuō)明如下:
(1) 擴(kuò)展導(dǎo)入符Extension Introducer)用于識(shí)別擴(kuò)展塊的開(kāi)始,域中的值是一個(gè)數(shù)值等于0x21的固定值。
(2) 圖形控制標(biāo)簽(Graphic Control Label)用于標(biāo)識(shí)當(dāng)前塊是一個(gè)圖形控制擴(kuò)展塊,域中的值是一個(gè)數(shù)值等于0xF9的固定值。
(3) 塊大小(Block Size)用來(lái)說(shuō)明該擴(kuò)展塊所包含字節(jié)數(shù),該字節(jié)數(shù)是從這個(gè)塊大小(Block Size)域之后到塊結(jié)束符之間的字節(jié)數(shù)。
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
字節(jié)號(hào) |
域的名稱(chēng) |
類(lèi)型 |
Extension Introducer |
0 |
擴(kuò)展導(dǎo)入符 |
Byte |
Graphic Control Label |
1 |
圖形擴(kuò)展標(biāo)簽 |
Byte |
|
|
|
|
Block Size |
0 |
塊大小 |
Byte |
<Packed Fields> |
1 |
包裝域 |
See below |
Delay Time |
2 |
延時(shí)時(shí)間 |
Unsigned |
|
|
|
|
Transparent Color Index |
3 |
透明彩色索引 |
Byte |
|
|
|
|
Block Terminator |
0 |
塊結(jié)束符 |
Byte |
圖6-11 圖像描述塊的結(jié)構(gòu)
(4) 包裝域的結(jié)構(gòu)如圖6-12所示。處理方法(Disposal Method)規(guī)定圖形顯示之后譯碼器要用表6-03中所述方法進(jìn)行處理。
表6-03 包裝域規(guī)定的處理方法
域值 |
處理方法 |
0 |
沒(méi)有指定要做任何處理 |
1 |
不處理,圖形留在原處 |
2 |
顯示圖形的區(qū)域必須要恢復(fù)成背景顏色 |
3 |
恢復(fù)成以前顯示的圖形 |
4~7 |
(未定義) |
用戶(hù)輸入標(biāo)志(User Input Flag)域表示在繼續(xù)處理之前是否需要用戶(hù)輸入響應(yīng)。在延時(shí)時(shí)間(Delay Time)和用戶(hù)輸入標(biāo)志(User Input Flag)都設(shè)置為1的情況下,繼續(xù)處理的開(kāi)始時(shí)間取決于用戶(hù)響應(yīng)輸入在前還是延時(shí)時(shí)間結(jié)束在前。
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Reserved(保留) |
Disposal Method(處理方法) |
User Input Flag |
Transparent Color Flag |
圖6-12 圖形控制擴(kuò)展塊的包裝結(jié)構(gòu)
(5) 透明(Transparency Flag)表示是否給出透明索引(transparency index)
(6) 延時(shí)時(shí)間(Delay Time)用來(lái)指定在圖形顯示之后繼續(xù)處理數(shù)據(jù)流之前的等待時(shí)間,一百分之一秒為單位。
(7) 當(dāng)且僅當(dāng)透明標(biāo)志位設(shè)置為1時(shí),透明索引(Transparency Index)用來(lái)指示處理程序是否要修改顯示設(shè)備上的相應(yīng)象點(diǎn)。當(dāng)且僅當(dāng)透明標(biāo)志位設(shè)置為1時(shí),就要修改。
(8) 塊結(jié)束符(Block Terminator)表示該圖形控制擴(kuò)展塊(Graphic Control Extension)結(jié)束,它是由一個(gè)字節(jié)組成的數(shù)據(jù)塊,該域的值是一個(gè)固定的值:0x00,因此稱(chēng)為零長(zhǎng)度數(shù)據(jù)子塊(zero-length Data Sub-block)。
8. 無(wú)格式文本擴(kuò)展塊
無(wú)格式文本擴(kuò)展塊(Plain Text Extension)包含文本數(shù)據(jù)和描繪文本所須的參數(shù)。文本數(shù)據(jù)用7位的ASCII字符編碼并以圖形形式顯示。擴(kuò)展塊的結(jié)構(gòu)如圖6-13所示。
7 6 5 4 3 2 1 0 |
字節(jié)號(hào) |
域的名稱(chēng) |
數(shù)據(jù)類(lèi)型 |
Extension Introducer (0x21) |
0 |
擴(kuò)展導(dǎo)入符 |
Byte |
Plain Text Label (0x01) |
1 |
無(wú)格式文本標(biāo)簽 |
Byte |
Block Size |
0 |
塊大小 |
Byte |
Text Grid Left Position |
1 |
文本網(wǎng)格左列位置 |
Unsigned |
|
2 |
|
|
Text Grid Top Position |
3 |
文本網(wǎng)格頂行位置 |
Unsigned |
|
4 |
|
|
Text Grid Width |
5 |
文本網(wǎng)格寬度 |
Unsigned |
|
6 |
|
|
Text Grid Height |
7 |
文本網(wǎng)格高度 |
Unsigned |
|
8 |
|
|
Character Cell Width |
9 |
字符單元寬度 |
Byte |
Character Cell Height |
10 |
字符單元高度 |
Byte |
Text Foreground Color Index |
11 |
文本顏色索引 |
Byte |
Text Background Color Index |
12 |
文本背景顏色索引 |
Byte |
|
|
|
|
Plain Text Data |
|
無(wú)格式文本數(shù)據(jù) |
Data Sub-blocks |
|
|
|
|
圖6-13 無(wú)格式文本擴(kuò)展塊結(jié)構(gòu)
9. 注釋擴(kuò)展塊
注釋擴(kuò)展塊(Comment Extension)域的內(nèi)容用來(lái)說(shuō)明圖形、作者或者其他任何非圖形數(shù)據(jù)和控制信息的文本信息。
注釋擴(kuò)展塊的結(jié)構(gòu)如圖6-14所示。其中的注釋數(shù)據(jù)是序列數(shù)據(jù)子塊(Data Sub-blocks),每塊最多255個(gè)字節(jié),最少1個(gè)字節(jié)。
7 6 5 4 3 2 1 0 |
字節(jié)號(hào) |
域的名稱(chēng) |
數(shù)據(jù)類(lèi)型 |
Extension Introducer (0x21) |
0 |
擴(kuò)展導(dǎo)入符 |
Byte |
Comment Label (0xFE) |
1 |
注釋標(biāo)簽 |
Byte |
Comment Data |
0 |
注釋數(shù)據(jù) |
|
|
|
|
Data Sub-blocks |
|
… |
|
|
|
N-1 |
|
|
Block Terminator |
|
塊結(jié)束符 |
Byte |
圖6-14 注釋擴(kuò)展塊
10. 應(yīng)用擴(kuò)展塊
應(yīng)用擴(kuò)展塊(Application Extension)包含制作該圖像文件的應(yīng)用程序的相關(guān)信息,它的結(jié)構(gòu)如圖6-15所示。
7 6 5 4 3 2 1 0 |
字節(jié)號(hào) |
域的名稱(chēng) |
數(shù)據(jù)類(lèi)型 |
Extension Introducer (0x21) |
0 |
擴(kuò)展導(dǎo)入符 |
Byte |
Extension Label (0xFF) |
1 |
擴(kuò)展標(biāo)簽 |
Byte |
Block Size |
0 |
塊大小 |
Byte |
|
1 |
|
|
|
2 |
|
|
|
3 |
|
|
Application Identifier |
4 |
應(yīng)用程序標(biāo)識(shí)符 |
8 Bytes |
|
5 |
(程序名稱(chēng)) |
|
|
6 |
|
|
|
7 |
|
|
|
8 |
|
|
|
9 |
|
|
Appl. Authentication Code |
10 |
應(yīng)用程序識(shí)別碼 |
3 Bytes |
|
11 |
|
|
|
|
|
|
Application Data |
|
應(yīng)用數(shù)據(jù) |
Data Sub-blocks |
|
|
|
|
圖6-15 應(yīng)用擴(kuò)展塊
11. GIF文件結(jié)束塊
結(jié)束塊(GIF Trailer)表示GIF文件的結(jié)尾,它包含一個(gè)固定的數(shù)值:0x3B。它具有如圖6-16所示的結(jié)構(gòu)。
7 6 5 4 3 2 1 0 |
域的名稱(chēng) |
數(shù)據(jù)類(lèi)型 |
GIF Trailer = 0x3B |
GFI文件結(jié)束塊 |
Byte |
圖6-16 GIF文件結(jié)束塊
6.2.4 速差表
表6-04 GIF文件格式
塊的名稱(chēng) |
需要 |
標(biāo)簽 |
擴(kuò)展 |
版本號(hào). |
Application Extension(應(yīng)用擴(kuò)展) |
Opt. (*) |
0xFF (255) |
yes |
89a |
Comment Extension(注釋擴(kuò)展) |
Opt. (*) |
0xFE (254) |
yes |
89a |
Global Color Table(全局彩色表) |
Opt. (1) |
none |
no |
87a |
Graphic Control Extension(圖形控制擴(kuò)展) |
Opt. (*) |
0xF9 (249) |
yes |
89a |
Header(文件頭) |
Req. (1) |
none |
no |
N/A |
Image Descriptor(圖像描述) |
Opt. (*) |
0x2C (044) |
no |
87a (89a) |
Local Color Table(局部彩色表) |
Opt. (*) |
none |
no |
87a |
Logical Screen Descriptor(邏輯屏幕描述塊) |
Req. (1) |
none |
no |
87a (89a) |
Plain Text Extension(無(wú)格式文本擴(kuò)展) |
Opt. (*) |
0x01 (001) |
yes |
89a |
Trailer(文件結(jié)束) |
Req. (1) |
0x3B (059) |
no |
87a |
Unlabeled Blocks(無(wú)標(biāo)號(hào)塊)
Header(文件頭) |
Req. (1) |
none |
no |
N/A |
Logical Screen Descriptor(邏輯屏幕描述塊) |
Req. (1) |
none |
no |
87a (89a) |
Global Color Table(全局彩色表) |
Opt. (1) |
none |
no |
87a |
Local Color Table(局部彩色表) |
Opt. (*) |
none |
no |
87a |
Graphic-Rendering Blocks(圖像描繪塊)
Plain Text Extension(無(wú)格式文本擴(kuò)展) |
Opt. (*) |
0x01 (001) |
yes |
89a |
Image Descriptor(圖像描述塊) |
Opt. (*) |
0x2C (044) |
no |
87a (89a) |
Control Blocks(控制塊)
Graphic Control Extension(圖形控制擴(kuò)展) |
Opt. (*) |
0xF9 (249) |
yes |
89a |
Special Purpose Blocks(專(zhuān)用塊)
Trailer(結(jié)束) |
Req. (1) |
0x3B (059) |
no |
87a |
Comment Extension(注釋擴(kuò)展) |
Opt. (*) |
0xFE (254) |
yes |
89a |
Application Extension(應(yīng)用程序擴(kuò)展) |
Opt. (*) |
0xFF (255) |
yes |
89a |
表中:Req. (1) 表示最多出現(xiàn)一次
Opt. (*) 出現(xiàn)次數(shù)大于等于0
posted on 2005-06-22 16:52
小米 閱讀(6972)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
其它