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