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