From: chrisg@cbmvax.commodore.com (Chris Green) Newsgroups: comp.graphics,comp.sys.amiga.graphics Subject: Re: Amiga to Targa Reply-To: chrisg@cbmvax.commodore.com (Chris Green) Organization: Commodore, West Chester, PA Lines: 602 Here's a file documenting the targa format: ====================================================================================== This file has been created to satisfy numerous requests for information on Targa image file formats. The information has been taken from Appendix C of the Truevision Technical Guide. Requests for further information could be directed to: AT&T Electronic Photography and Imaging Center 2002 Wellesley Ave. Indianapolis, IN 42619 This document does not pretend to be complete, but it does pretend to be accurate. If you discover any finger checks or erroneous information please let me know, ( David McDuffee, 75530,2626), and I will upload the corrections. Thanks. The lack of completeness is due to the fact that the Targa recognizes over half a dozen image file formats, some of which are more widely used than others. I have chosen to re-key the details on only those formats which I actually use. Again, if you want to know more about formats not covered here, you could contact your Truevision representative. All Targa formats are identified by a Data Type field, which is a one byte binary integer located in byte three of the file. The various file types specified by this field are as follows: 0 - No image data included. 1 - Uncompressed, color-mapped images. 2 - Uncompressed, RGB images. 3 - Uncompressed, black and white images. 9 - Runlength encoded color-mapped images. 10 - Runlength encoded RGB images. 11 - Compressed, black and white images. 32 - Compressed color-mapped data, using Huffman, Delta, and runlength encoding. 33 - Compressed color-mapped data, using Huffman, Delta, and runlength encoding. 4-pass quadtree-type process. This document will describe only four formats: 1, 2, 9, and 10. -------------------------------------------------------------------------------- DATA TYPE 1: Color-mapped images. | _______________________________________________________________________________| | Offset | Length | Description | |--------|--------|------------------------------------------------------------| |--------|--------|------------------------------------------------------------| | 0 | 1 | Number of Characters in Identification Field. | | | | | | | | This field is a one-byte unsigned integer, specifying | | | | the length of the Image Identification Field. Its range | | | | is 0 to 255. A value of 0 means that no Image | | | | Identification Field is included. | | | | | |--------|--------|------------------------------------------------------------| | 1 | 1 | Color Map Type. | | | | | | | | This field contains a binary 1 for Data Type 1 images. | | | | | |--------|--------|------------------------------------------------------------| | 2 | 1 | Image Type Code. | | | | | | | | This field will always contain a binary 1. | | | | ( That's what makes it Data Type 1 ). | | | | | |--------|--------|------------------------------------------------------------| | 3 | 5 | Color Map Specification. | | | | | | 3 | 2 | Color Map Origin. | | | | Integer ( lo-hi ) index of first color map entry. | | | | | | 5 | 2 | Color Map Length. | | | | Integer ( lo-hi ) count of color map entries. | | | | | | 7 | 1 | Color Map Entry Size. | | | | Number of bits in each color map entry. 16 for | | | | the Targa 16, 24 for the Targa 24, 32 for the Targa 32. | | | | | |--------|--------|------------------------------------------------------------| | 8 | 10 | Image Specification. | | | | | | 8 | 2 | X Origin of Image. | | | | Integer ( lo-hi ) X coordinate of the lower left corner | | | | of the image. | | | | | | 10 | 2 | Y Origin of Image. | | | | Integer ( lo-hi ) Y coordinate of the lower left corner | | | | of the image. | | | | | | 12 | 2 | Width of Image. | | | | Integer ( lo-hi ) width of the image in pixels. | | | | | | 14 | 2 | Height of Image. | | | | Integer ( lo-hi ) height of the image in pixels. | | | | | | 16 | 1 | Image Pixel Size. | | | | Number of bits in a stored pixel index. | | | | | | 17 | 1 | Image Descriptor Byte. | | | | Bits 3-0 - number of attribute bits associated with each | | | | pixel. | | | | Bit 4 - reserved. Must be set to 0. | | | | Bit 5 - screen origin bit. | | | | 0 = Origin in lower left-hand corner. | | | | 1 = Origin in upper left-hand corner. | | | | Must be 0 for Truevision images. | | | | Bits 7-6 - Data storage interleaving flag. | | | | 00 = non-interleaved. | | | | 01 = two-way (even/odd) interleaving. | | | | 10 = four way interleaving. | | | | 11 = reserved. | | | | This entire byte should be set to 0. Don't ask me. | | | | | |--------|--------|------------------------------------------------------------| | 18 | varies | Image Identification Field. | | | | Contains a free-form identification field of the length | | | | specified in byte 1 of the image record. It's usually | | | | omitted ( length in byte 1 = 0 ), but can be up to 255 | | | | characters. If more identification information is | | | | required, it can be stored after the image data. | | | | | |--------|--------|------------------------------------------------------------| | varies | varies | Color map data. | | | | | | | | The offset is determined by the size of the Image | | | | Identification Field. The length is determined by | | | | the Color Map Specification, which describes the | | | | size of each entry and the number of entries. | | | | Each color map entry is 2, 3, or 4 bytes. | | | | Unused bits are assumed to specify attribute bits. | | | | | | | | The 4 byte entry contains 1 byte for blue, 1 byte | | | | for green, 1 byte for red, and 1 byte of attribute | | | | information, in that order. | | | | | | | The 3 byte entry contains 1 byte each of blue, green, | | | | and red. | | | | | | | | The 2 byte entry is broken down as follows: | | | | ARRRRRGG GGGBBBBB, where each letter represents a bit. | | | | But, because of the lo-hi storage order, the first byte | | | | coming from the file will actually be GGGBBBBB, and the | | | | second will be ARRRRRGG. "A" represents an attribute bit. | | | | | |--------|--------|------------------------------------------------------------| | varies | varies | Image Data Field. | | | | | | | | This field specifies (width) x (height) color map | | | | indices. Each index is stored as an integral number | | | | of bytes (typically 1 or 2). All fields are unsigned. | | | | The low-order byte of a two-byte field is stored first. | | | | | -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- DATA TYPE 2: Unmapped RGB images. | _______________________________________________________________________________| | Offset | Length | Description | |--------|--------|------------------------------------------------------------| |--------|--------|------------------------------------------------------------| | 0 | 1 | Number of Characters in Identification Field. | | | | | | | | This field is a one-byte unsigned integer, specifying | | | | the length of the Image Identification Field. Its value | | | | is 0 to 255. A value of 0 means that no Image | | | | Identification Field is included. | | | | | |--------|--------|------------------------------------------------------------| | 1 | 1 | Color Map Type. | | | | | | | | This field contains either 0 or 1. 0 means no color map | | | | is included. 1 means a color map is included, but since | | | | this is an unmapped image it is usually ignored. TIPS | | | | ( a Targa paint system ) will set the border color | | | | the first map color if it is present. | | | | | |--------|--------|------------------------------------------------------------| | 2 | 1 | Image Type Code. | | | | | | | | This field will always contain a binary 2. | | | | ( That's what makes it Data Type 2 ). | | | | | |--------|--------|------------------------------------------------------------| | 3 | 5 | Color Map Specification. | | | | | | | | Ignored if Color Map Type is 0; otherwise, interpreted | | | | as follows: | | | | | | 3 | 2 | Color Map Origin. | | | | Integer ( lo-hi ) index of first color map entry. | | | | | | 5 | 2 | Color Map Length. | | | | Integer ( lo-hi ) count of color map entries. | | | | | | 7 | 1 | Color Map Entry Size. | | | | Number of bits in color map entry. 16 for the Targa 16, | | | | 24 for the Targa 24, 32 for the Targa 32. | | | | | |--------|--------|------------------------------------------------------------| | 8 | 10 | Image Specification. | | | | | | 8 | 2 | X Origin of Image. | | | | Integer ( lo-hi ) X coordinate of the lower left corner | | | | of the image. | | | | | | 10 | 2 | Y Origin of Image. | | | | Integer ( lo-hi ) Y coordinate of the lower left corner | | | | of the image. | | | | | | 12 | 2 | Width of Image. | | | | Integer ( lo-hi ) width of the image in pixels. | | | | | | 14 | 2 | Height of Image. | | | | Integer ( lo-hi ) height of the image in pixels. | | | | | | 16 | 1 | Image Pixel Size. | | | | Number of bits in a pixel. This is 16 for Targa 16, | | | | 24 for Targa 24, and .... well, you get the idea. | | | | | | 17 | 1 | Image Descriptor Byte. | | | | Bits 3-0 - number of attribute bits associated with each | | | | pixel. For the Targa 16, this would be 0 or | | | | 1. For the Targa 24, it should be 0. For | | | | Targa 32, it should be 8. | | | | Bit 4 - reserved. Must be set to 0. | | | | Bit 5 - screen origin bit. | | | | 0 = Origin in lower left-hand corner. | | | | 1 = Origin in upper left-hand corner. | | | | Must be 0 for Truevision images. | | | | Bits 7-6 - Data storage interleaving flag. | | | | 00 = non-interleaved. | | | | 01 = two-way (even/odd) interleaving. | | | | 10 = four way interleaving. | | | | 11 = reserved. | | | | | |--------|--------|------------------------------------------------------------| | 18 | varies | Image Identification Field. | | | | Contains a free-form identification field of the length | | | | specified in byte 1 of the image record. It's usually | | | | omitted ( length in byte 1 = 0 ), but can be up to 255 | | | | characters. If more identification information is | | | | required, it can be stored after the image data. | | | | | |--------|--------|------------------------------------------------------------| | varies | varies | Color map data. | | | | | | | | If the Color Map Type is 0, this field doesn't exist. | | | | Otherwise, just read past it to get to the image. | | | | The Color Map Specification describes the size of each | | | | entry, and the number of entries you'll have to skip. | | | | Each color map entry is 2, 3, or 4 bytes. | | | | | |--------|--------|------------------------------------------------------------| | varies | varies | Image Data Field. | | | | | | | | This field specifies (width) x (height) pixels. Each | | | | pixel specifies an RGB color value, which is stored as | | | | an integral number of bytes. | | | | | | | | The 2 byte entry is broken down as follows: | | | | ARRRRRGG GGGBBBBB, where each letter represents a bit. | | | | But, because of the lo-hi storage order, the first byte | | | | coming from the file will actually be GGGBBBBB, and the | | | | second will be ARRRRRGG. "A" represents an attribute bit. | | | | | | | | The 3 byte entry contains 1 byte each of blue, green, | | | | and red. | | | | | | | | The 4 byte entry contains 1 byte each of blue, green, | | | | red, and attribute. For faster speed (because of the | | | | hardware of the Targa board itself), Targa 24 images are | | | | sometimes stored as Targa 32 images. | | | | | -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- DATA TYPE 9: Run Length Encoded, color-mapped images. | _______________________________________________________________________________| | Offset | Length | Description | |--------|--------|------------------------------------------------------------| |--------|--------|------------------------------------------------------------| | 0 | 1 | Number of Characters in Identification Field. | | | | | | | | This field is a one-byte unsigned integer, specifying | | | | the length of the Image Identification Field. Its value | | | | is 0 to 255. A value of 0 means that no Image | | | | Identification Field is included. | | | | | |--------|--------|------------------------------------------------------------| | 1 | 1 | Color Map Type. | | | | | | | | This field is always 1 for color-mapped images. | | | | | |--------|--------|------------------------------------------------------------| | 2 | 1 | Image Type Code. | | | | | | | | A binary 9 for this data type. | | | | | |--------|--------|------------------------------------------------------------| | 3 | 5 | Color Map Specification. | | | | | | 3 | 2 | Color Map Origin. | | | | Integer ( lo-hi ) index of first color map entry. | | | | | | 5 | 2 | Color Map Length. | | | | Integer ( lo-hi ) count of color map entries. | | | | | | 7 | 1 | Color Map Entry Size. | | | | Number of bits in each color map entry. 16 for the | | | | Targa 16, 24 for the Targa 24, 32 for the Targa 32. | | | | | |--------|--------|------------------------------------------------------------| | 8 | 10 | Image Specification. | | | | | | 8 | 2 | X Origin of Image. | | | | Integer ( lo-hi ) X coordinate of the lower left corner | | | | of the image. | | | | | | 10 | 2 | Y Origin of Image. | | | | Integer ( lo-hi ) Y coordinate of the lower left corner | | | | of the image. | | | | | | 12 | 2 | Width of Image. | | | | Integer ( lo-hi ) width of the image in pixels. | | | | | | 14 | 2 | Height of Image. | | | | Integer ( lo-hi ) height of the image in pixels. | | | | | | 16 | 1 | Image Pixel Size. | | | | Number of bits in a pixel. This is 16 for Targa 16, | | | | 24 for Targa 24, and .... well, you get the idea. | | | | | | 17 | 1 | Image Descriptor Byte. | | | | Bits 3-0 - number of attribute bits associated with each | | | | pixel. For the Targa 16, this would be 0 or | | | | 1. For the Targa 24, it should be 0. For the | | | | Targa 32, it should be 8. | | | | Bit 4 - reserved. Must be set to 0. | | | | Bit 5 - screen origin bit. | | | | 0 = Origin in lower left-hand corner. | | | | 1 = Origin in upper left-hand corner. | | | | Must be 0 for Truevision images. | | | | Bits 7-6 - Data storage interleaving flag. | | | | 00 = non-interleaved. | | | | 01 = two-way (even/odd) interleaving. | | | | 10 = four way interleaving. | | | | 11 = reserved. | | | | | |--------|--------|------------------------------------------------------------| | 18 | varies | Image Identification Field. | | | | Contains a free-form identification field of the length | | | | specified in byte 1 of the image record. It's usually | | | | omitted ( length in byte 1 = 0 ), but can be up to 255 | | | | characters. If more identification information is | | | | required, it can be stored after the image data. | | | | | |--------|--------|------------------------------------------------------------| | varies | varies | Color map data. | | | | | | | | The offset is determined by the size of the Image | | | | Identification Field. The length is determined by | | | | the Color Map Specification, which describes the | | | | size of each entry and the number of entries. | | | | Each color map entry is 2, 3, or 4 bytes. | | | | Unused bits are assumed to specify attribute bits. | | | | | | | | The 4 byte entry contains 1 byte for blue, 1 byte | | | | for green, 1 byte for red, and 1 byte of attribute | | | | information, in that order. | | | | | | | The 3 byte entry contains 1 byte each of blue, green, | | | | and red. | | | | | | | | The 2 byte entry is broken down as follows: | | | | ARRRRRGG GGGBBBBB, where each letter represents a bit. | | | | But, because of the lo-hi storage order, the first byte | | | | coming from the file will actually be GGGBBBBB, and the | | | | second will be ARRRRRGG. "A" represents an attribute bit. | | | | | |--------|--------|------------------------------------------------------------| | varies | varies | Image Data Field. | | | | | | | | This field specifies (width) x (height) color map | | | | indices. The indices are stored in packets. There | | | | two types of packets: Run-length packets, and Raw | | | | packets. Both types of packets consist of a 1-byte | | | | header, identifying the type of packet and specifying a | | | | count, followed by a variable-length body. | | | | The high-order bit of the header is "1" for the | | | | run length packet, and "0" for the raw packet. | | | | | | | | For the run-length packet, the header consists of: | | | | __________________________________________________ | | | | | 1 bit | 7 bit repetition count minus 1. | | | | | | ID | Since the maximum value of this | | | | | | | field is 127, the largest possible | | | | | | | run size would be 128. | | | | | |-------|----------------------------------------| | | | | | 1 | C C C C C C C | | | | | -------------------------------------------------- | | | | | | | | For the raw packet, the header consists of: | | | | __________________________________________________ | | | | | 1 bit | 7 bit number of pixels minus 1. | | | | | | ID | Since the maximum value of this | | | | | | | field is 127, there can never be | | | | | | | more than 128 pixels per packet. | | | | | |-------|----------------------------------------| | | | | | 0 | N N N N N N N | | | | | -------------------------------------------------- | | | | | | | | For the run length packet, the header is followed by | | | | a single color index, which is assumed to be repeated | | | | the number of times specified in the header. The RLE | | | | packet may cross scan lines ( begin on one line and end | | | | on the next ). | | | | | | | | For the raw packet, the header is followed by the number | | | | of color indices specified in the header. The raw | | | | packet may cross scan lines ( begin on one line and end | | | | on the next ). | | | | | -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- DATA TYPE 10: Run Length Encoded, RGB images. | _______________________________________________________________________________| | Offset | Length | Description | |--------|--------|------------------------------------------------------------| |--------|--------|------------------------------------------------------------| | 0 | 1 | Number of Characters in Identification Field. | | | | | | | | This field is a one-byte unsigned integer, specifying | | | | the length of the Image Identification Field. Its range | | | | is 0 to 255. A value of 0 means that no Image | | | | Identification Field is included. | | | | | |--------|--------|------------------------------------------------------------| | 1 | 1 | Color Map Type. | | | | | | | | This field contains either 0 or 1. 0 means no color map | | | | is included. 1 means a color map is included, but since | | | | this is an unmapped image it is usually ignored. TIPS | | | | ( a Targa paint system ) will set the border color | | | | the first map color if it is present. Wowie zowie. | | | | | |--------|--------|------------------------------------------------------------| | 2 | 1 | Image Type Code. | | | | | | | | Binary 10 for this type of image. | | | | | |--------|--------|------------------------------------------------------------| | 3 | 5 | Color Map Specification. | | | | | | | | Ignored if Color Map Type is 0; otherwise, interpreted | | | | as follows: | | | | | | 3 | 2 | Color Map Origin. | | | | Integer ( lo-hi ) index of first color map entry. | | | | | | 5 | 2 | Color Map Length. | | | | Integer ( lo-hi ) count of color map entries. | | | | | | 7 | 1 | Color Map Entry Size. | | | | Number of bits in color map entry. This value is 16 for | | | | the Targa 16, 24 for the Targa 24, 32 for the Targa 32. | | | | | |--------|--------|------------------------------------------------------------| | 8 | 10 | Image Specification. | | | | | | 8 | 2 | X Origin of Image. | | | | Integer ( lo-hi ) X coordinate of the lower left corner | | | | of the image. | | | | | | 10 | 2 | Y Origin of Image. | | | | Integer ( lo-hi ) Y coordinate of the lower left corner | | | | of the image. | | | | | | 12 | 2 | Width of Image. | | | | Integer ( lo-hi ) width of the image in pixels. | | | | | | 14 | 2 | Height of Image. | | | | Integer ( lo-hi ) height of the image in pixels. | | | | | | 16 | 1 | Image Pixel Size. | | | | Number of bits in a pixel. This is 16 for Targa 16, | | | | 24 for Targa 24, and .... well, you get the idea. | | | | | | 17 | 1 | Image Descriptor Byte. | | | | Bits 3-0 - number of attribute bits associated with each | | | | pixel. For the Targa 16, this would be 0 or | | | | 1. For the Targa 24, it should be 0. For the | | | | Targa 32, it should be 8. | | | | Bit 4 - reserved. Must be set to 0. | | | | Bit 5 - screen origin bit. | | | | 0 = Origin in lower left-hand corner. | | | | 1 = Origin in upper left-hand corner. | | | | Must be 0 for Truevision images. | | | | Bits 7-6 - Data storage interleaving flag. | | | | 00 = non-interleaved. | | | | 01 = two-way (even/odd) interleaving. | | | | 10 = four way interleaving. | | | | 11 = reserved. | | | | | |--------|--------|------------------------------------------------------------| | 18 | varies | Image Identification Field. | | | | Contains a free-form identification field of the length | | | | specified in byte 1 of the image record. It's usually | | | | omitted ( length in byte 1 = 0 ), but can be up to 255 | | | | characters. If more identification information is | | | | required, it can be stored after the image data. | | | | | |--------|--------|------------------------------------------------------------| | varies | varies | Color map data. | | | | | | | | If the Color Map Type is 0, this field doesn't exist. | | | | Otherwise, just read past it to get to the image. | | | | The Color Map Specification, describes the size of each | | | | entry, and the number of entries you'll have to skip. | | | | Each color map entry is 2, 3, or 4 bytes. | | | | | |--------|--------|------------------------------------------------------------| | varies | varies | Image Data Field. | | | | | | | | This field specifies (width) x (height) pixels. The | | | | RGB color information for the pixels is stored in | | | | packets. There are two types of packets: Run-length | | | | encoded packets, and raw packets. Both have a 1-byte | | | | header, identifying the type of packet and specifying a | | | | count, followed by a variable-length body. | | | | The high-order bit of the header is "1" for the | | | | run length packet, and "0" for the raw packet. | | | | | | | | For the run-length packet, the header consists of: | | | | __________________________________________________ | | | | | 1 bit | 7 bit repetition count minus 1. | | | | | | ID | Since the maximum value of this | | | | | | | field is 127, the largest possible | | | | | | | run size would be 128. | | | | | |-------|----------------------------------------| | | | | | 1 | C C C C C C C | | | | | -------------------------------------------------- | | | | | | | | For the raw packet, the header consists of: | | | | __________________________________________________ | | | | | 1 bit | 7 bit number of pixels minus 1. | | | | | | ID | Since the maximum value of this | | | | | | | field is 127, there can never be | | | | | | | more than 128 pixels per packet. | | | | | |-------|----------------------------------------| | | | | | 0 | N N N N N N N | | | | | -------------------------------------------------- | | | | | | | | | | | | For the run length packet, the header is followed by | | | | a single color value, which is assumed to be repeated | | | | the number of times specified in the header. The | | | | packet may cross scan lines ( begin on one line and end | | | | on the next ). | | | | | | | | For the raw packet, the header is followed by | | | | the number of color values specified in the header. | | | | | | | | The color entries themselves are two bytes, three bytes, | | | | or four bytes ( for Targa 16, 24, and 32 ), and are | | | | broken down as follows: | | | | | | | | The 2 byte entry - | | | | ARRRRRGG GGGBBBBB, where each letter represents a bit. | | | | But, because of the lo-hi storage order, the first byte | | | | coming from the file will actually be GGGBBBBB, and the | | | | second will be ARRRRRGG. "A" represents an attribute bit. | | | | | | | | The 3 byte entry contains 1 byte each of blue, green, | | | | and red. | | | | | | | | The 4 byte entry contains 1 byte each of blue, green, | | | | red, and attribute. For faster speed (because of the | | | | hardware of the Targa board itself), Targa 24 image are | | | | sometimes stored as Targa 32 images. | | | | | --------------------------------------------------------------------------------