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