原文
# v- \( b. A" Phttp://dev.gameres.com/Program/Visual/Other/TGAFormat.htm
" B- n& O c( w
! L% R0 p* p. x T, S( U% Q1 O3 B根据david mcduffe编写的TGA文件格式资料翻译而成# L* g k/ m! i" r
/ z% v+ P8 ~+ d8 X1 P
本文档是为满足许多对 TGA 图像格式的了解需要而创建的。本文摘录自truevision 技术指南的附录 C,如果7 G3 @ l! V& r5 E; e5 S
需要更进一步的信息,请致信以下地址:: A C1 e. T) j# `" j1 R
2 d$ o; i/ l! x7 a: z at&t
# v5 m$ B' E* U& `( `3 E: n electronic photography and imaging center& n% f0 a, M+ D* k- T% P
2002 wellesley ave.$ N+ ^6 S0 q" v
indianapolis, in 42619
# Q7 v2 V* H4 @ J9 q本文档不求全面,但力求准确。如果你发现了任何拼写错误或内容错误,请告诉我,( david mcduffe, 3 ?) M( {$ |* D6 j* {0 F
75530,2626 ),我将改正这些错误,谢谢。
- n( D$ M3 P. ?- h
9 b# s2 q$ P/ M M, X+ S不全面的原因是 TGA 包含了超过六种图像文件格式,而其中的几种较为常用。 我选择了我现在使用的格式并# K9 A# X2 q; Q( |
在本文中加以详解。 如果你需要本文中没有包含的格式说明,你可以与你的 truevision 代理商联系。0 ], N0 E; t+ G
对所有的 TGA 格式的文件而言,其第三字节(二进制整数)用来区别各种不同的 TGA 文件。下面列出了该字
& f! N; s6 P: \" p7 B1 i% ~1 \, \! w节表明的对应文件类型:
* ^. {% c; m; n) a1 q. M7 t2 v 0 - 文件中没有图像数据6 s5 W7 C5 T4 T6 ?0 u
1 - 未压缩的,颜色表图像3 I1 e+ ~: p7 f" v! i& e
2 - 未压缩的,rgb 图像
7 p, K! \4 n2 j6 d( ]) U 3 - 未压缩的,黑白图像
6 `( M5 g6 c( i 9 - runlength 编码的颜色表图像
; ~. M$ Q# K; T9 E4 Q; j' C 10 - runlength 编码的 rgb 图像2 B! ]- M% w/ ]/ `" A ^- q
11 - 压缩的,黑白图像
m# j& T6 o; I( P$ X: m9 P( U 32 - 使用 huffman,delta 和 runlength 编码的颜色表图像
( }+ @$ k4 ^& K: |& v& S( u 33 - 使用 huffman,delta 和 runlength 编码的颜色映射图像,4 趟四叉树类型处理。7 ^! S1 T% G& S6 q5 _7 a
本文仅仅描述对应 1,2,9 和 10 的文件格式。
' F! j4 K2 a8 H: k# \* Z0 i- b* j( \
--------------------------------------------------------------------------------
* j- Z7 \! v* f) q5 @* R|数据类型 1: 颜色表(color-mapped)图像
% t- c* g/ g$ v6 N7 |; E|--------|--------|------------------------------------------------------------
4 z! d* } c! ]2 _$ K/ O9 t3 a( Z| 偏移 | 长度 | 描述
' J4 |: J# a4 o y6 u|--------|--------|------------------------------------------------------------- \* Z( y! M; a, Z6 k2 ]( H3 {* S: {: n
| 0 | 1 | 图像信息字段(见本子表的后面)的字符数 8 _1 q8 v, r6 V4 [% i
| | | , t$ M9 {, o3 `7 M5 {. E
| | | 本字段是 1 字节无符号整型,指出了图像格式区别字段长度
/ S; g! h) K- W' u9 F( b| | | 其取值范围是 0 到 255 ,当它为 0 时表示没有图像的
: K0 ~6 d# P2 T9 Q+ J| | | 信息字段。 0 L. K9 C% @. n) X( W8 w# q
| | | ! W7 n `' f5 l) Z8 w
| | |
: S' X* p1 {; F; U1 w|--------|--------|------------------------------------------------------------8 T n+ g; O& k0 N# G3 X
| 1 | 1 | 颜色表的类型
# L) E. ^ w0 M| | |
8 K# v' @7 m* y: ?% r| | | 该字段为表示对应格式 1 的图像而包含一个二进制 1 + P* I2 W; l% I& z+ L6 `
| | | ) N- z' K1 _) L, R T
|--------|--------|------------------------------------------------------------- l5 h% H( F$ }
| 2 | 1 | 图像类型码 6 N1 P4 g* f$ l
| | | " i" D ~! c1 y n9 i! h5 P" M
| | | 该字段总为 1 , 这也是此类型为格式 1 的原因 & t: J6 b2 y' c& l7 F1 T
| | |
/ @2 F& ^/ K4 ^# Z|--------|--------|------------------------------------------------------------
4 F' S( b# O' D| 3 | 5 | 颜色表规格 9 G8 l% V) t% s5 F: e( w g3 H4 G
| | |
5 u* f4 d- D8 p1 Y( F" D| 3 | 2 | 颜色表首址
6 Q0 _; m9 i2 V2 C( f* d || | | 颜色表首元表项的整型(低位-高位)索引 2 r0 U5 _# d8 o2 f
| | | * ^5 I$ i9 j E8 {: i& C
| 5 | 2 | 颜色表的长度 $ y4 o# Q7 T$ P# W3 a1 Q
| | | 颜色表的表项总数,整型(低位-高位)
$ a+ S8 e. G, Y' w| | |
' D4 b( K, d- q6 f- B( a5 M| 7 | 1 | 颜色表表项的位(bit)数
/ ^% _( E: F& E0 S0 q| | | 16 代表 16 位 TGA ,24 代表 24 位 TGA ,32 代表 32 位 TGA : l2 _' w+ G1 o9 J, d
| | |
5 {9 o v; s9 N| | | / A. ]. e: m0 m8 w4 w2 d
|--------|--------|------------------------------------------------------------
" A. {, {! Z! S9 K+ F9 b| 8 | 10 | 图像规格
; }- P y; `* e! h. n| | |
5 R- d; P1 x$ O1 s& \7 J* W8 {5 s| 8 | 2 | 图像 x 坐标起始位置
P$ x% c, |! y9 {. z+ {| | | 图像左下角 x 坐标的整型(低位-高位)值 5 b3 C& Z U- W, `0 \0 M" S1 t
| | |
- n9 W g1 s; F- A ]6 P- U| | |
/ U; H4 H0 a" y# J| 10 | 2 | 图像 y 坐标起始位置
8 S. |. ]+ G1 T5 U/ H0 |" x| | | 图像左下角 y 坐标的整型(低位-高位)值
) u9 M7 m( O. s/ Q4 _: h _| | |
; S* q) D2 G. c$ V. D) }| | | & J0 C8 C6 ]2 F+ ~3 h4 T
| 12 | 2 | 图像宽度 1 z: f0 ]/ f/ J
| | | 以像素为单位,图像宽度的整型(低位-高位)值
1 O8 \! _8 y; ]9 E. _, B- h| | |
( G! J$ i7 V: |6 v+ C4 u2 p* P| 14 | 2 | 图像高度 8 w' D" Z5 N* p% S, N
| | | 以像素为单位,图像高度的整型(低位-高位)值
4 `: @. c; I _3 v% J2 ^| | |
1 o9 E2 G z$ o( c5 D9 W, k. d& E2 Z; u| 16 | 1 | 图像每像素存储占用位(bit)数 2 d4 ]4 S1 K* p/ C: z+ o
| | | . c; x7 j! c; \" N) Z" i
| | |
7 u4 Q- `/ ?, x2 k9 U) Z| 17 | 1 | 图像描述符字节
9 Q u) j3 v( @| | | bits 3-0 - 每像素的属性位(bit)数 ! t% y/ X0 o0 I$ G( w A% Z/ d6 d
| | | 0 w7 B% r& Q: x4 N8 H5 j) ~. c
| | | bit 4 - 保留,必须为 0
' k( p/ \; X* e# K| | | bit 5 - 屏幕起始位置标志
5 s! X) C0 x9 X' \2 p/ X' h| | | 0 = 原点在左下角 : _) w/ p9 Y) ^# s- o- q0 E1 P; W
| | | 1 = 原点在左上角
4 i! P+ @/ f" M( ~| | | truevision 图像必须为 0 ' f* | n* @) x, S" W
| | | bits 7-6 - 交叉数据存储标志
. o9 G$ k* ^" d: G" P6 ?' l/ N| | | 00 = 无交叉 7 X0 C6 K: z- o, F( N1 |
| | | 01 = 两路奇/偶交叉 $ |; ?& Y0 ~ C- t: u' R# x0 N
| | | 10 = 四路交叉 1 u% w% U9 x3 U* G# L( H
| | | 11 = 保留 8 w1 T1 m: ~7 J9 E |0 B0 I4 c" [5 K
| | | 这一项应该设为 0,不要问我为什么 - G) o: K* r3 R5 y8 _" P
| | |
' v+ f! X& q# R1 C4 ]8 N* t|--------|--------|------------------------------------------------------------
, ?# v! ~) T6 t+ Q1 n4 f) K7 V| 18 | 可变 | 图像信息字段
' `( _3 D" y! p( [5 \# \# L0 E4 M. K! `| | | 包含一个自由格式的,长度是图像记录块偏移 0 处的字节中的 , ?7 h" F. H1 m I' T
| | | 值。它常常被忽略(即偏移 0 处值为 0 ),注意其最大可以 4 f1 X6 \, M% f* K' m# W
| | | 含有 255 个字符。如果需要存储更多信息,可以放在图像数据
+ j, O- g2 Q9 w& \% K% X| | | 之后 5 s p; P1 l4 @- q& M) F/ L4 H+ W
| | |
8 n. B4 t6 l3 `$ J| | | / w8 J. N0 c: x; W, v
|--------|--------|------------------------------------------------------------
q6 q9 K7 p' y! G$ q$ i3 O| 可变 | 可变 | 颜色表数据
3 W$ q l9 I* F| | |
5 A4 o. O9 l6 ?9 Q: J| | | 起始位置由前一个字段的大小决定;其长度由单项数据大小 . t8 N0 _+ O* I1 b+ W
| | | 和数据项数目决定(在前面相应的说明字段中给出)
9 H$ a. @$ ^3 q) u# j| | | 每项是 2 字节,3 字节或 4 字节,字节中没有使用的位(bit) # |% h2 j3 u- a* Q/ ]: l) e4 c$ }0 H0 P+ m
| | | 被认为是属性位。
/ e8 Z2 \' E l E. U+ [| | |
3 K! K; p7 H4 W' K$ M8 |: n| | | 4 字节表项中,字节 1 表示 BLUE,字节 2 表示 GREEN,
9 g9 k# S. x( O8 b! H5 l% || | | 字节 3 表示 RED,字节 4 表示属性 0 H1 C$ U/ w7 ^1 \) [, [4 a; ]
| | | 3 字节表项中各字节依次对应 BLUE,GREEN,RED
/ @0 G) ~3 S; Y' p9 ]| | | - E/ h/ d+ u/ G% C/ t, J5 p$ B
| | | 2 字节表项中,两个字节分解成如下形式:
6 D! q H* W8 u' d; ]9 o% S| | | arrrrrgg gggbbbbb * b* Q) S# d0 j% B. ~
| | | 但是,由于低位在前,高位在后的存储顺序,从文件中读出表项
" w5 U' o4 s3 V9 c0 k| | | 时,将先读入 gggbbbbb 而后读入 arrrrrgg ;a 表示属性位。
& O* l: v: h) J0 X4 [| | | 9 N6 }$ l. D* [9 U
|--------|--------|------------------------------------------------------------
! W2 i k( S* H0 w) A* f p| 可变 | 可变 | 图像数据字段
( H& q1 a7 M1 g7 |4 T/ y: e1 J$ N| | |
0 U2 b) x; b' z7 @/ K| | | 该字段给出了 (高度)x(宽度)个颜色表项索引,每个索引 5 M! W& X5 w, J H# H$ b6 v
| | | 以整数个字节的形式存储(典型的例子如 1 或 2 个字节) ) m9 D( R X" F: W. V0 }* k; M
| | | 所有的数据都没有符号,对于 2-字节表项而言,低位字节是 0 c! g) c" d: {2 f8 T5 l. n
| | | 先存储的。 & ~7 V$ a1 x: \0 z
| | |
6 k8 l* b o6 }5 z9 x1 a% ?-------------------------------------------------------------------------------
$ k( m* M z- v j8 e( u: O |) W. V% I+ I* }
: b2 B# G& J1 W6 \! ~2 t: ^
4 l) b$ @0 s& ?! q7 W/ h6 Y--------------------------------------------------------------------------------5 h2 _: v4 G9 i% y; Q1 t! N% V
|数据类型 2: 无颜色表 rgb 图像 : [# a( K, M) ?! d* X+ [
|--------|--------|------------------------------------------------------------
) t1 E; y! ~" x| 偏移 | 长度 | 描述
+ } n0 P4 _- i; w2 P4 f* P; ||--------|--------|----------------------------------------------------------
N2 f1 O6 \9 r/ y| 0 | 1 | 图像信息字段( 见本子表的后面 )的字符数; {+ i* c. C, r0 m5 J! Y8 z& N
| | | 8 k( H9 o- r9 h4 ~: a8 [# W
| | | 本字段是 1 字节无符号整型,指出了图像格式区别字段长度
2 b8 B1 }) }' o' ?# d| | | 其取值范围是 0 到 255 ,当它为 0 时表示没有图像的" P1 [" \0 F' O# K
| | | 信息字段。
0 d5 E8 x8 j% R6 H @) J( ?0 R| | |
/ x' i( [0 I3 y/ W6 l4 I|--------|--------|------------------------------------------------------------0 N# y0 T6 E% C6 B; u
| 1 | 1 | 颜色表类型
9 G% @! N, m- B/ B4 E$ b| | | 2 f4 s! v1 ?& w1 E5 g6 S; S0 O4 I) Z
| | | 该字段的内容或者为 0 或者为 1;0 表示没有颜色表,1 表示( N6 F, }! N8 X: ?: ~- }
| | | 颜色表存在。由于本格式是无颜色表的,因此此项通常被忽略。
9 `8 `! J; \5 X/ b8 G( k* y8 \| | | 提示:如果置为 1(targa 绘画程序)将把边框颜色设置为映射2 V$ p: Z6 ~0 t) L; M
| | | 中的第一种颜色
! ~; A# q& F3 Z' u) x| | |
1 u/ m2 A! n1 {|--------|--------|------------------------------------------------------------
m t2 f. ^( W0 f7 ^3 A* s| 2 | 1 | 图像类型码
; V3 W2 W9 H0 T3 A3 m3 u( B| | |
; h, R1 j* ^& e3 k( I/ e- ^| | | 该字段总为 2 , 这也是此类型为格式 2 的原因 " `, Z. K( t$ Q ]: J
| | |
/ N# x# m2 K: V+ M k$ y|--------|--------|------------------------------------------------------------
9 Y6 `0 ~8 f6 o" q/ B6 C) [0 |. b| 3 | 5 | 颜色表规格, N$ @/ `- C" p" _3 C
| | |
# Q; Q" s6 d. v* s| | | 如果颜色表类型字段为 0 则被忽略;否则描述如下' `! j9 ^ R' z$ i, [6 Y7 w
| | |
) O9 Y8 ? ]+ Z5 w, h5 h& p" S& a6 H& S| 3 | 2 | 颜色表首址+ k% r9 J) }: F" I
| | | 颜色表首元入口的整型(低位-高位)索引+ y$ S9 u& B) J! P' l
| | |
$ \' [5 {, ~* C* n& l5 L) C H; g4 p| 5 | 2 | 颜色表的长度
$ z+ N# q! R. Y3 j| | | 颜色表的表项总数,整型(低位-高位) . B4 H, A! ?3 u3 h
| | |
5 _7 t- F4 D; p! G+ w0 {3 b| 7 | 1 | 颜色表表项的位(bit)数
& @* K" n) R/ a# j( @* m| | | 16 代表 16 位 TGA ,24 代表 24 位 TGA ,32 代表 32 位 TGA
5 x. V( W: t- h' `0 n+ \5 p+ h| | |
; l) ~' J' D: d! Y8 u: z2 o| | | . h! e3 D( E \9 b& n5 f( i. v
|--------|--------|------------------------------------------------------------
' J9 f1 _. x5 o5 @# O3 G| 8 | 10 | 图像规格0 e1 G0 r! o6 Q8 J) h0 w
| | |
+ c# R3 t8 d* @, Z| 8 | 2 | 图像 x 坐标起始位置 9 r. L! K& e' x3 I
| | | 图像左下角 x 坐标的整型(低位-高位)值
2 G8 B7 N5 |8 G8 u2 y9 O' R9 x| | | 7 I8 B }+ k6 i8 k5 P8 c+ w
| | |" j) B ?& `/ _; Y% J. G# G
| 10 | 2 | 图像 y 坐标起始位置
. _8 e: m; Y0 B6 F$ a- m| | | 图像左下角 y 坐标的整型(低位-高位)值- _) K2 q0 }4 i0 \& R0 d. W' @. ?0 N( E
| | | 1 Q8 b, `( T$ R' c
| | |& a) F: Z5 @# p- R" X
| 12 | 2 | 图像宽度
9 o9 B- n% R' i) O. H| | | 以像素为单位,图像宽度的整型(低位-高位)值
7 Y7 j) M( ^4 |' p# N/ T* D; @| | | & `. H! U; A$ W8 m
| 14 | 2 | 图像高度
4 ~) u" k6 W) n| | | 以像素为单位,图像高度的整型(低位-高位)值
; T7 _& |; l; C- |5 ~! Z5 B| | |# N3 Y" ?3 j9 ?# S9 k/ P
| 16 | 1 | 图像每像素存储占用位(bit)数0 P5 g6 \+ Q! V/ m8 \
| | | 它的值为16,24 或 32 等等决定了该图像是 TGA 16,TGA24
* e, h1 H$ c1 g| | | TGA 32 等等
9 I! G& T% r# {( o9 k| | |4 j) h J; a, @4 M% ^" j9 w
| 17 | 1 | 图像描述符字节& X, \, d0 }! b1 G4 G' ]5 B
| | | bits 3-0 - 每像素对应的属性位的位数;对于 TGA 16,
2 B7 q5 ^4 {" |( Z D| | | 该值为 0 或 1,对于 TGA 24,该值为 0,
6 V/ b, s, U0 X5 ~| | | 对于 TGA 32,该值为 8
0 f0 M% g$ |2 g0 F5 ~ f| | | ' \6 L# ^1 y; j2 H# M( E- S
| | | bit 4 - 保留,必须为 0: \/ v) c# O$ R9 `. d/ ~ V
| | | bit 5 - 屏幕起始位置标志
7 i) P' k* v% h8 l+ r| | | 0 = 原点在左下角# [, J4 f1 b' J; Q: r. p
| | | 1 = 原点在左上角$ ]" f2 T7 K: b
| | | 对于 truevision 图像必须为 0
8 g# A: F# m9 N2 u2 C. W| | | bits 7-6 - 交叉数据存储标志
' {* f. b( c' X| | | 00 = 无交叉
/ \: r0 d% e. |$ P& z. q| | | 01 = 两路奇/偶交叉 9 J$ ?+ W. i# b6 \* A2 c: _# h1 R
| | | 10 = 四路交叉
2 F$ o* ?- S J$ Z9 L1 U| | | 11 = 保留
0 x* m4 z2 I8 o" y! }4 k: m+ Y| | | / u/ E3 }9 @9 `8 M* A0 u p0 j
|--------|--------|------------------------------------------------------------' I- a7 d5 y6 G& P; `" a2 v; _7 @% {
| 18 | 可变 | 图像信息字段
1 _% i9 g/ h1 M* p| | | 包含一个自由格式的,长度是图像记录块偏移 0 处的字节中的 4 Z# w/ v8 f# I4 @
| | | 值。它常常被忽略(即偏移 0 处值为 0 ),注意其最大可以 - U5 t) w/ r/ m2 F5 @! g* f/ ?! u3 v. B% o
| | | 含有 255 个字符。如果需要存储更多信息,可以放在图像数据
+ y7 b' d5 ~" b: T2 t' \| | | 之后
/ u/ ]5 J5 z& n* O; N7 g| | |
$ }" `7 ~% Z. v. j+ K `3 I' D|--------|--------|------------------------------------------------------------& T! l6 _/ N D" Z9 ^% @# J
| 可变 | 可变 | 颜色表数据 ! e$ j% c: G3 Z5 B
| | | 0 S, O1 q# _1 C W4 I
| | | 如果颜色表类型为 0,则该域不存在,否则越过该域直接读取, b3 g9 u$ u1 X4 S. L
| | | 图像颜色表规格中描述了每项的字节数,为 2,3,4 之一
6 y1 f+ j& c- u+ z3 [| | |
w/ i8 d3 W q, F| | |
% L/ q' A5 n, N: x* H| | | * d+ `# L' K( K3 s/ Y" ]8 T& i
| | | : W9 Z! k# v+ Q; b
|--------|--------|------------------------------------------------------------
0 I/ f/ Z! T3 B1 X9 s I| 可变 | 可变 | 图像数据域
; u4 Z- ^& l" t, m' c| | | ( c8 c8 ?0 S& m5 R; a" o
| | | 这里存储了(宽度)x(高度)个像素,每个像素中的 rgb 色值$ `& c6 K/ {9 y- e6 L9 C( ^
| | | 该色值包含整数个字节
+ F0 ~& }) h. |) X; x; c" m| | |
) n% A6 x' e) N( h: T| | | 2 ?/ l# q/ w8 j7 x
| | | 3 字节表项中各字节依次对应 BLUE,GREEN,RED 7 S( ]# l9 G+ \/ S' W; S
| | |
# h0 ~" X# N r/ Q6 S| | | 2 字节表项中,两个字节分解成如下形式:
" ~; t3 ^- S5 q* [; z| | | arrrrrgg gggbbbbb
: X$ p% b( Z) R8 W| | | 但是,由于低位在前,高位在后的存储顺序,从文件中读出表项
, I( N8 @& q5 h' x- k" h9 O| | | 时,将先读入 gggbbbbb 而后读入 arrrrrgg ;a 表示属性位5 w5 C# V! z- W6 |! ?- G6 B! P
| | | 3 {1 ?, x* ?8 A2 b; P
| | | 4 字节表项包含了分别代表 blue,green,red 及属性的四个' @" E7 x2 D! M; w* {# G% g) G
| | | 字节;(由于硬件上的原因)有的时候 TGA 24 类型的图像也象+ Z! K2 g; d! A0 r2 [
| | | TGA 32 类型的图像那样存储& ]/ b" s9 k7 Y1 E( f5 R
| | |
% } K* Z" w- X& ~6 [, d| | |
* b+ B; v# j" i4 \0 e, J" L. {0 B--------------------------------------------------------------------------------& U& B. }+ K4 v" `% m. u
0 T9 y5 F. D1 V2 ^% R/ q: C7 H2 b. ^3 W; A' M: m
* P% k! Z2 j5 ]; Z& n& Q& r
# M. s- C) o0 f+ F--------------------------------------------------------------------------------) P6 [% k" N; O, t5 B; ` T( M
|数据类型 9: runlength 编码,带颜色表的图像! a" P; L* k. S; F
|--------|--------|------------------------------------------------------------: x4 `1 C. v( h2 U
| 偏移 | 长度 | 描述+ m. ~- B2 O- w5 f
|--------|--------|------------------------------------------------------------( q6 c: J g! l* v
| 0 | 1 | 图像信息字段(见本子表的后面)的字符数
8 l2 k" a- I1 U0 B9 z* X7 k| | | 3 [1 i( t: h$ d) \+ o8 ~# x
| | | 本字段是 1 字节无符号整型,指出了图像格式区别字段长度 4 I& x1 i2 @6 S( e$ `5 Z- ~+ T
| | | 其取值范围是 0 到 255 ,当它为 0 时表示没有图像的 / ]; @8 K) O& c4 y, X v8 t8 R% x
| | | 信息字段。 - \; l/ |. ^7 Q+ w
| | |
4 G! I$ S' ?" q6 G6 Y|--------|--------|------------------------------------------------------------4 G9 x) G0 o O2 f y) S6 u
| 1 | 1 | 颜色表的类型 + O* S) j G [& [0 j
| | | 9 T1 t& t: G& m- `6 V% ^( l
| | | 该字段为表示对应带颜色表的图像而总为 1 , V; i3 {5 d0 O! Y& {) d; S0 }
| | | 0 i4 v4 U" o% s+ ^3 ?) O
|--------|--------|------------------------------------------------------------/ V: v: ~' v8 K5 }
| 2 | 1 | 图像类型码
" n; S2 r6 F- Q1 q- P% i/ M| | |
8 Q* @: A0 n' m5 ?| | | 本类型该字段为二进制 9+ O5 ^! A: |8 Q$ ~ e
| | | : a0 X8 [+ B: d Y# Y a1 E, ?
|--------|--------|------------------------------------------------------------
6 G1 ~1 y% J' ^ `8 d| 3 | 5 | 颜色表规格
% q$ U# V" _% [5 b1 \| | | 7 I! M V; F" x4 A6 y
| | | 如果颜色表类型字段为 0 则被忽略;否则描述如下; l! C7 B8 |6 j) V- B
| | | 3 J' }0 u# W# M
| | |
& p4 `6 K S$ C% m| 3 | 2 | 颜色表首址# e: J- e8 |: `/ f
| | | 颜色表首元入口的整型(低位-高位)索引# K- l- R9 [8 Y
| | | 1 l& E. g; O" X1 f) w0 Q* {) s/ f
| 5 | 2 | 颜色表的长度
! m/ M% V6 q2 V4 Q8 X/ Z+ d- I| | | 颜色表的表项总数,整型(低位-高位)
+ V& i+ f! M. \+ S| | | 3 z+ D+ Z9 @, i$ n& ^2 B5 L% r
| 7 | 1 | 颜色表表项的位(bit)数- {' T! K, v5 g
| | | 16 代表 16 位 TGA ,24 代表 24 位 TGA ,32 代表 32 位 TGA+ `0 |9 g3 _% \
| | |
# ] F5 n4 U2 I; H$ ?; @2 K$ ?|--------|--------|------------------------------------------------------------4 N/ ~' t4 u6 O2 g
| 8 | 10 | 图像规格 $ _5 Z' Q" {+ x/ \: G
| | | 0 D. u* g9 U4 K8 x. V
| 8 | 2 | 图像 x 坐标起始位置 6 L6 U3 n0 M# @4 R
| | | 图像左下角 x 坐标的整型(低位-高位)值
2 |8 @8 h j+ X! V# r| | |
" T$ O. { E8 a$ m3 @# H1 k! i| | |
9 ~3 `8 L- L& [% q" b| 10 | 2 | 图像 y 坐标起始位置
8 A, w( Y" ]4 C0 s" B! b4 I( n| | | 图像左下角 y 坐标的整型(低位-高位)值 $ m3 k4 F& D$ Z3 E
| | | 9 I" S( H" @* _" l" j- U
| | |
4 f3 _8 ]* V' u| 12 | 2 | 图像宽度
; m3 W* o% G& B) _9 E| | | 以像素为单位,图像宽度的整型(低位-高位)值 & S, k. M( N" P% l; C z
| | | 5 s# f& {+ R5 e; Y, B3 a
| 14 | 2 | 图像高度
% l3 W0 A, p9 z. f, @) i3 b4 Y| | | 以像素为单位,图像高度的整型(低位-高位)值 2 D H, {! H4 c' Y
| | |
0 A4 ?) S% X6 i1 J7 {8 V| 16 | 1 | 图像每像素存储占用位(bit)数 , e3 V7 P! a% M
| | | " R0 i! a: u6 ^0 X7 I, V/ [
| | |
! _$ M+ h8 n3 o7 @| 17 | 1 | 图像描述符字节
9 y8 \( ]1 J7 R2 S" p1 H| | | bits 3-0 - 每像素的属性位(bit)数
9 J' F- S% Y6 U% |: w| | |
7 m2 h1 @* G0 N8 t7 J6 r6 v* E# G| | | bit 4 - 保留,必须为 0
, x+ g% J! i$ F# J1 ?7 [2 ?) o| | | bit 5 - 屏幕起始位置标志 ) P: ?6 t7 _" w; @% [' |. g
| | | 0 = 原点在左下角
. \) i* ^! O, e& W! s| | | 1 = 原点在左上角
3 m( p) z/ q [: t0 Y2 O| | | truevision 图像必须为 0 ! h E5 C# Q$ v' A. h+ _7 y
| | | bits 7-6 - 交叉数据存储标志 # r: I( [! `' v; S$ E/ j$ k
| | | 00 = 无交叉 + x, y. [* \$ l7 h9 q, O4 g# m
| | | 01 = 两路奇/偶交叉
3 N; L3 i; w. J9 R| | | 10 = 四路交叉 4 \9 O' \$ |. I" Q: Q' F4 I
| | | 11 = 保留
7 f& c6 O" N8 x) Z# h) y) Z| | | % T7 L' q+ p1 u0 m
|--------|--------|------------------------------------------------------------! d) H, r; q7 B4 V( I4 Q
| 18 | 可变 | 图像信息字段 " D9 a4 n, `% D5 o
| | | 包含一个自由格式的,长度是图像记录块偏移 0 处的字节中的
, ^( L) W! F$ R: J2 x M: B0 y| | | 值。它常常被忽略(即偏移 0 处值为 0 ),注意其最大可以
c! I! X+ p( L; Y0 ]$ o9 J| | | 含有 255 个字符。如果需要存储更多信息,可以放在图像数据 # f$ k4 L9 ]$ N$ D
| | | 之后
! x* x8 `% A! o| | |
$ E* K$ `+ N6 a0 A( u$ v8 l|--------|--------|------------------------------------------------------------
/ Y* X5 y8 b) D2 s* p: N| 可变 | 可变 | 颜色表数据 + x: W8 x, p( b
| | | , F) ]$ ]4 \# c
| | | 起始位置由前一个字段的大小决定;其长度由单项数据大小
$ y) s6 P5 k( e: `7 K3 t| | | 和数据项数目决定(在前面相应的说明字段中给出) ( K$ ^2 r. u# b* U7 Q
| | | 每项是 2 字节,3 字节或 4 字节,字节中没有使用的位(bit) 5 _$ o8 I2 Y( f% `" W/ S- @
| | | 被认为是属性位。 5 Z" D+ C1 ] Z6 e
| | | 5 X5 @; A3 v* ?, u2 \
| | | 4 字节表项中,字节 1 表示 BLUE,字节 2 表示 GREEN,
2 y0 G' i* i: u V# o3 M. W| | | 字节 3 表示 RED,字节 4 表示属性
5 [5 a! q8 o0 \: a| | | 3 字节表项中各字节依次对应 BLUE,GREEN,RED 3 @# ?7 \0 y, L" q1 l ]
| | | , K6 U9 {. {6 g; N8 G/ W1 O
| | | 2 字节表项中,两个字节分解成如下形式:
/ Q5 U& c/ J/ i3 C# C| | | arrrrrgg gggbbbbb
: y: A5 J9 P; D H3 v| | | 但是,由于低位在前,高位在后的存储顺序,从文件中读出表项 , m9 |. L5 D2 i5 K* N6 U
| | | 时,将先读入 gggbbbbb 而后读入 arrrrrgg ;a 表示属性位。% d$ E1 T1 t1 c( Z
| | |
* D% `% I1 @- f& Z% X|--------|--------|------------------------------------------------------------
( |2 L8 L# ?4 W/ ~) q9 J0 g9 Y| 可变 | 可变 | 图像数据域7 E/ z' r3 \) p+ ]! ^" M
| | |
4 Z' ^3 S' W0 }" y2 @0 r8 Q; |, c| | | 本区域给出了(宽度)x(高度)个颜色表索引这些索引存放
T& x8 C; G& K7 W1 V! `| | | 在数据包中;有两中类型的数据包:run-length 数据包,
& @7 Z. X/ _! { x1 L| | | 以及未加工的数据包,每种类型的数据包含有 1-字节的头信息,2 z7 Q# V' }) ~! U& k
| | | (其中指出了数据包类型和数目),其后是可变长度的数据域
$ \1 Q5 W7 _; @% G$ I| | | 头信息中最高位为 1 表示 run-length 类型的数据包,当6 {2 a2 u1 s( l+ B7 G/ J9 B8 @% O! S
| | | 它为 0 时,表示未加工的数据包
/ X% p- w! \' s+ q+ W| | | # u' e6 g# E. i. {8 m1 g* O
| | | 对于 run-length 数据包,头信息含义如下, H) k& S% W6 K7 p$ ^ {4 R9 x7 @# Z
| | | __________________________________________________ - Y. n5 c3 D% F& `* O
| | | | 1 bit | 7 位的重复记数减一
) `) u1 U9 Z& m4 H y# d| | | | id | 由于 7 位表示的最大值为 127,故最大 |0 c# k# i* O$ d9 ]4 ?+ ]) V
| | | | | 的运行大小为 128,(译注:原文为 |
% g9 m! I3 E6 A* [, I( @! ^| | | | | the largest run size) | 1 l9 v. X7 j7 v5 G1 e; T% r) w2 z/ m
| | | |-------|----------------------------------------|
$ X0 }& F8 z2 D4 i& @! ]' h| | | | 1 | c c c c c c c |
E5 j" J1 h. g+ e) u) l| | | --------------------------------------------------
. X; I2 I4 m3 Q) q+ || | | 2 g, `. @ s* T K9 {+ Q, |* o
| | | 对于未加工数据包,头信息的含义如下8 h* `1 r- M0 @. R! u" E
| | | __________________________________________________" ^+ ~5 G: d% S; D1 a# p4 S
| | | | 1 bit | 7 位的像素个数减一 |
" G4 [) v+ t; L| | | | id | 由于 7 位表示的最大值为 127,故该 |) H4 U0 _6 _# N, P6 q2 d
| | | | | 类型的一个数据包中像素个数不能大于 |
* s/ d5 }; w9 }/ k( D8 B| | | | | 128 |' f$ j/ T" B+ V' D1 A
| | | |-------|----------------------------------------|( P8 u$ V9 t' n, W
| | | | 0 | n n n n n n n |
+ P6 g+ F" v4 V3 ^| | | --------------------------------------------------" R. C5 P! g, y9 Z9 f7 f; k
| | |
' I* g, w+ p0 i' y| | | 对于 run-length 数据包而言,头信息之后是一个简单的
9 p0 [! [" b8 Q0 k' k| | | 颜色索引,且假定该索引被重复头信息中低 7 位表示的次数
7 b1 ]3 }6 u0 B3 n, x! _' F| | | run-length 数据包也许会跨越扫描线; C4 S: Y5 a8 I
| | | (扫描线起始于某行结束于下一行)
@9 \/ g" L6 ^- \1 L4 f| | | , `% U, ?1 ^. V9 U/ S7 }: z" o0 Z
| | | 对于未加工的数据包,头信息之后是颜色索引(数值由头信息
1 L3 l2 k/ D0 `" a. r4 y& e| | | 给出)该类型的数据包也可能跨越扫描线
8 y& z& C9 u: p. L' ]4 B8 ^) b+ }0 }4 || | |
& _- l" P6 Z5 g# l--------------------------------------------------------------------------------
9 ]2 k8 R* g- O3 L! I$ i+ C/ q. c+ A) N6 {
. f1 h- J8 T# W. ^. p5 ^- Q
6 v' N( z* x5 E) q
) n; }+ F4 L' |6 E
--------------------------------------------------------------------------------
" Z& Z" T) ]) w( f/ u8 @|数据类型 10:run length 编码,rgb 图像8 V# j- u7 B v+ m" w
|--------|--------|------------------------------------------------------------
/ ~1 F0 |; E& w3 g# R$ || 偏移 | 长度 | 描述
: X7 C$ g. Q, f g3 o3 \2 _* z|--------|--------|------------------------------------------------------------
! p# }( A9 q% t9 `| 0 | 1 | 图像信息字段(见本子表的后面)的字符数 % V. Q) @' y& V2 h+ u! o
| | |
0 x1 P- z1 O$ Q) _, X7 p| | | 本字段是 1 字节无符号整型,指出了图像格式区别字段长度 . u' H6 h7 E+ i" p0 l
| | | 其取值范围是 0 到 255 ,当它为 0 时表示没有图像的
" B) g" v Z# {5 s. B R, v| | | 信息字段。
: M2 i6 n7 t9 K| | |
7 B7 `% N; v3 V|--------|--------|------------------------------------------------------------+ I+ a1 i! u) H/ F; n$ ~+ X4 n& I t
| 1 | 1 | 该字段的内容或者为 0 或者为 1;0 表示没有颜色表,1 表示
% r/ J8 P( n3 T# I3 L$ M( H| | | 颜色表存在。由于本格式是无颜色表的,因此此项通常被忽略。- |7 m* @5 |. ^. A$ L1 q7 L8 `* s
| | | 提示:如果置为 1(targa 绘画程序)将把边框颜色设置为映射
8 C: ^, Q# o" ?* O( [| | | 中的第一种颜色
& L9 `% s u' I+ n8 V8 _| | | & m1 ^3 v! _- n, O/ K* u1 T- ?
|--------|--------|------------------------------------------------------------! f% l, _, Q* n2 F/ M( e& c9 k" X4 T: Y$ y
| 2 | 1 | 图像类型代码- D$ T# W d# {+ W
| | |
" J$ e1 _6 b1 ^0 I. [) S9 ]| | | 本类型该字段为二进制 100 A2 s1 r1 M0 n
| | |
4 ]4 `2 {' g" `* d* T|--------|--------|------------------------------------------------------------0 |! i1 [6 b' f4 O/ q
| 3 | 5 | 颜色表规格- P) J1 O; [( ~6 o
| | |
7 J4 W+ s1 k; I| | | 如果颜色表类型字段为 0 则被忽略;否则描述如下
. A1 F6 R/ m q$ ^ n0 f: s9 P& j| | |
0 N* V6 m& h+ g! [4 x0 c4 e* H| | | & M( w* ?8 D1 Z R' l" x2 c. \
| 3 | 2 | 颜色表首址
, L3 s; W" ~2 m9 I! G8 e| | | 颜色表首元入口的整型(低位-高位)索引! ^0 d" V5 {' k6 K2 l" e
| | |
. {, p0 l9 H* ]/ J& S| 5 | 2 | 颜色表的长度
: {3 f* E3 v' ~0 S9 p) K( _) ^+ F| | | 颜色表的表项总数,整型(低位-高位)
# w( C4 K' T' ~7 _5 X- c# ?| | | - r* `+ `$ m/ G! O/ i9 x
| 7 | 1 | 颜色表表项的位(bit)数( ^! g) z+ ]* V0 ?5 `
| | | 16 代表 16 位 TGA ,24 代表 24 位 TGA ,32 代表 32 位 TGA1 b o8 b: {$ Y; V
| | | * c- @7 O: z$ U) w' b+ E: W
|--------|--------|------------------------------------------------------------) u! R( W H; S: O3 U
| 8 | 10 | 图像规格 / m. P. X3 {. k
| | | . M4 v( Q* X* j6 H, s6 g5 ]
| 8 | 2 | 图像 x 坐标起始位置 $ q" z1 t4 B$ m/ o2 l" q3 K
| | | 图像左下角 x 坐标的整型(低位-高位)值 8 d+ Z# v2 e/ e% J) Z* D9 u, S
| | | ) x# j% [. n5 g( q- @5 c
| | | 0 @8 Y+ T0 d4 l
| 10 | 2 | 图像 y 坐标起始位置
- j0 ]/ M$ v9 v| | | 图像左下角 y 坐标的整型(低位-高位)值 6 v7 e1 B; m% z( W5 o; ] p
| | |
+ J2 [9 n' d$ O* ^| | |
8 u" _1 V1 L% x% E+ x8 O| 12 | 2 | 图像宽度
- h( M G0 T9 _2 \| | | 以像素为单位,图像宽度的整型(低位-高位)值
4 ~- p+ `. _ O1 T& y| | | 0 w" C, [- U0 w! E) D
| 14 | 2 | 图像高度 $ `+ ?! w! q1 |; [, A* c0 N
| | | 以像素为单位,图像高度的整型(低位-高位)值 6 d4 _7 l1 j9 i" |3 y
| | | ' J j9 z# m+ l
| 16 | 1 | 图像每像素存储占用位(bit)数
J7 z4 I' Y/ o5 j| | |
1 k2 x% F' j4 H/ z' X5 {# Y7 X4 M* l| | |
+ |' E3 z! t4 p) |; m6 J1 W2 M| 17 | 1 | 图像描述符字节
; x8 p) @. K) N3 s5 X| | | bits 3-0 - 每像素的属性位(bit)数 9 C, Y3 c6 D8 Z8 B0 R1 W0 O
| | | 5 _1 n' X$ Q, D+ v
| | | bit 4 - 保留,必须为 0
9 O$ O. @4 N/ g, H z& T. Y| | | bit 5 - 屏幕起始位置标志 $ u- n' q' L3 l5 A9 a& v
| | | 0 = 原点在左下角
+ }( ~" e, O$ ?: ^8 {4 a| | | 1 = 原点在左上角
: N( @$ E0 b6 C. L5 ^& N| | | truevision 图像必须为 0 ( w$ N) w) f/ g5 H7 c% |2 }) ^
| | | bits 7-6 - 交叉数据存储标志
( h% R1 O# b8 k; e& s| | | 00 = 无交叉 M; L9 M2 S4 W8 D ~" @* Z K+ g
| | | 01 = 两路奇/偶交叉
6 j& `, j9 g; A$ R| | | 10 = 四路交叉 : o W- k) r' y5 b# I. X2 l
| | | 11 = 保留 ; x/ T0 g1 u" X
| | |
! J" X- x% }; p+ I; A|--------|--------|------------------------------------------------------------
' M, o. q1 \; u9 A1 a e% F4 [0 v| 18 | 可变 | 图像信息字段
0 ^* }, U/ m1 Q0 e1 D" K: k* ?7 \| | | 包含一个自由格式的,长度是图像记录块偏移 0 处的字节中的 8 ~; a. Y% `$ o3 C7 z; F) m: Y/ X
| | | 值。它常常被忽略(即偏移 0 处值为 0 ),注意其最大可以
, x: B$ z* h# j8 B| | | 含有 255 个字符。如果需要存储更多信息,可以放在图像数据
* d7 E u% o% C| | | 之后
7 e$ X ]; `- ?$ T0 s( E; N4 b| | | 3 x9 R' b; \) E. N8 I
|--------|--------|------------------------------------------------------------% v' w" d+ q; s8 b
| 可变 | 可变 | 颜色表数据
8 \* ]. k" S" b| | | 7 {0 G7 _( W1 v9 Z- [+ J0 o. A, p
| | | 如果颜色表类型为 0,则该域不存在,否则越过该域直接读取
( v8 y) `- q6 u* Z% U; z. q| | | 图像颜色表规格中描述了每项的字节数,为 2,3,4 之一0 |* s+ h7 X) H* y& ^
| | |
+ \( j. f$ K7 g0 e8 `, C, B|--------|--------|------------------------------------------------------------6 n7 E7 S8 T, C6 n8 `9 n& t! X
| 可变 | 可变 | 图像数据域
+ |0 J2 {# F5 O2 c8 M| | |
" e; q+ P; H: n- h( i| | | 本区域给出了(宽度)x(高度)个颜色表索引这些索引存放
: m+ o' V8 U+ G0 H% W' o| | | 在数据包中;有两中类型的数据包:run-length 数据包,
' X0 y* [$ j% S| | | 以及未加工的数据包,每种类型的数据包含有 1-字节的头信息,: g5 ]/ Z+ Q$ U* R) A# ^, b1 X7 ]. ^
| | | (其中指出了数据包类型和数目),其后是可变长度的数据域( s( B; w. ]& }4 V
| | | 头信息中最高位为 1 表示 run-length 类型的数据包,当5 s9 P+ Q; t+ u) D
| | | 它为 0 时,表示未加工的数据包
$ ~: K: x) g% ~6 r| | | 9 }, U% O" z% g
| | | 对于 run-length 数据包,头信息含义如下
! }+ [- }* H3 f* P0 E$ i% I| | | __________________________________________________
7 u# ^8 ?' ^7 D6 k; I* |$ P| | | | 1 bit | 7 位的重复记数减一! z& \' ]4 `" m1 ? q6 [
| | | | id | 由于 7 位表示的最大值为 127,故最大 |0 t' c5 Q+ q' B8 T
| | | | | 的运行大小为 128,(译注:原文为 |, a3 R; X8 c4 {7 Y: v
| | | | | the largest run size) |
5 c8 e8 ^- p+ {7 G| | | |-------|----------------------------------------|
" ?* _8 s. n4 Y% ]' i8 V| | | | 1 | c c c c c c c |$ w( O0 h0 G8 n. d4 {0 ^) H
| | | -------------------------------------------------- l0 _, F# O9 | w
| | |
% X+ P7 R0 T0 C; w| | | 对于未加工数据包,头信息的含义如下
* S' I v0 f6 Q* Z| | | __________________________________________________+ `% C8 V1 G" b( l9 q
| | | | 1 bit | 7 位的像素个数减一 |
2 v2 [) B+ z3 w3 @| | | | id | 由于 7 位表示的最大值为 127,故该 |
7 F: o+ k/ n t| | | | | 类型的一个数据包中像素个数不能大于 |' m1 S, u+ } g. s6 F3 K0 l
| | | | | 128 |# Q' \# t) S9 j7 w) e( h
| | | |-------|----------------------------------------|; G. o% R. n$ ?; {# _! I
| | | | 0 | n n n n n n n |# a4 h3 m- s1 X
| | | --------------------------------------------------
& x/ S' K: T7 ^, r6 c, k| | | - ?/ \6 a& A' t( ?' f$ \" D
| | |
, l+ A4 r, Q+ x% G| | | 对于 run length 数据包,头信息之后是一个简单颜色值,
2 {8 K% ]) Y- \# K" f| | | 且假定该值重复的次数为头信息中记录的数3 i3 `( `& Z- e7 w- s/ G9 S
| | | run-length 数据包也许会跨越扫描线
S+ O: O* s# @# \| | | (扫描线起始于某行结束于下一行)
) j+ K# S4 e) R! k+ J/ E| | |
4 }- O' U' {- o' g) d/ \( ?; m| | | 对于未加工数据包,头信息之后是颜色值(数目由头信息指出)
8 F w: `) ]2 D. d. j. L| | |
. a. G* Z, P( h& g2 H! P| | | - l2 P' g, B0 D1 F( ~3 O& ]) {
| | | 颜色表项自身有 2-字节,3-字节或 4-字节几种大小(分别* C5 Q4 P* a/ `; |4 E
| | | 对应 TGA 16,TGA 24 和 TGA 32)形式如下:
2 ~9 L: v( v0 e6 `- q4 [$ @( l| | |
7 y9 m3 U. i2 i1 j| | | % `6 W5 p, g" f% K) R( W
| | | 3 字节表项中各字节依次对应 BLUE,GREEN,RED
% |6 v# D" P, A0 O| | |
' w4 u. E" s3 \* ^| | | 2 字节表项中,两个字节分解成如下形式: , {0 S" \. E8 s7 [- T( g# o S$ l
| | | arrrrrgg gggbbbbb ; N* l8 g l9 _( s z
| | | 但是,由于低位在前,高位在后的存储顺序,从文件中读出表项
) r: H: v+ @; g# ^8 q9 J| | | 时,将先读入 gggbbbbb 而后读入 arrrrrgg ;a 表示属性位" m5 {# m6 Z. f/ z1 L
| | |
: ~+ B: y) ^, P' m6 R0 t- R| | | 4 字节表项包含了分别代表 blue,green,red 及属性的四个8 ?1 V/ N/ A! ~8 f+ J
| | | 字节;(由于硬件上的原因)有的时候 TGA 24 类型的图像也象9 A0 J2 H. {) J% g0 I4 K0 x
| | | TGA 32 类型的图像那样存储' x. L4 T6 t v: S4 D
| | | $ m% x6 C1 l) Z! A3 Q
--------------------------------------------------------------------------------
' t# c4 A# P3 f4 V6 y5 ?' _- v- }& v5 z
<完> |