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