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