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