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