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