# Truevision Targa

Truevision Targa ou TGA est un format de fichier image qui a été développé par Truevision à partir de 1984. Le format TGA supporte les images de n'importe quelle taille. Il est principalement utilisé dans les milieux professionnels pour la création d'images en couleur. Il permet de développer des images selon trois techniques :
* Pseudo-Color : chaque pixel est défini simplement par un indice qui fait référence à une couleur définie dans la palette graphique.
* True-Color : chaque pixel est directement défini par les intensités des couleurs primaires RVB.
* Direct-Color : chaque pixel est défini par trois indices indépendants faisant référence à l'intensité des couleurs primaires RVB définies dans une palette.
Il peut coder les couleurs entre 1 et 24 bits, et 8 bits supplémentaires sur le canal alpha.

## Détails techniques

Toutes les valeurs sont encodées en little-endian. Les numéros des champs correspondent à la version 2.0 de la spécification.

### Header

| Champ n$^o$ | Taille | Nom du champ | Description |
| 1 | 1 octet | ID length | Taille du champ contenant l'ID de l'image |
| 2 | 1 octet | Color map type | Indique si une table des couleurs est présente |
| 3 | 1 octet | Image type | Type de compression et de couleurs |
| 4 | 5 octets | Color map specification | Décrit la table des couleurs |
| 5 | 10 octets | Image specification | Dimensions de l'image et son format |
Image ID length (champ 1)
De 0 à 255, le nombre d'octets qui composent le champ attribuant l'ID de l'image. Ce champ peut contenir n'importe quelle information, mais il est d'usage qu'il
contienne la date et l'heure de création de l'image ou bien un numéro de série.
Color map type (champ 2)
Ce champ a la valeur:
* 0 si l'image ne contient pas de table des couleurs ;
* 1 s'il y en a une ;
* 2–127 réservé par Truevision ;
* 128–255 disponible à l'usage des développeurs.
Image type (champ 3)
Le type de l'image est décrit dans les trois bits de poids faible, le quatrième bit est un drapeau pour la compression RLE.
Si dessous, quelque valeurs possibles:
* 0 aucune données d'image ne sont présentes ;
* 1 image à couleurs indexées non compressé ;
* 2 image en Truecolor non compressé ;
* 3 image en noir et blanc (valeurs de gris) non compressé ;
* 9 image indexée codée par plages ;
* 10 image en Truecolor codée par plages ;
* 11 image en noir et blanc (valeurs de gris) codée par plages.
Type d'image 1 et 9: en fonction de la profondeur de couleur indiquée, c'est un index de 8, 15, or 16 bit pris dans une table de couleur qui définit la couleur du pixel. Type d'image 2 et 10: la couleur de chaque pixel est représentée directement dans les données de l'image. Pour une profondeur de couleurs de 15 et 16 bit, chaque pixel est stocké sur 5 bits par couleur. Si la profondeur de couleur est de 16 bits, le bit le plus élevé est réservé à la transparence. Pour une profondeur de couleurs de 24 bits, chaque pixel est stocké sur 8 bits par couleur. Une profondeur de couleur de 32-bit définit un canal alpha supplémentaire de 8-bit. Type d'image 3 et 11: les valeurs de gris sont directement représentées dans les données de l'image. La profondeur de couleur est de 8 bits pour les images de ce type.
Color map specification (champ 4)
Il y a trois sous-champs:
* First entry index (2 octets): index de la première entrée dans la table de couleur incluse dans le fichier ;
* Color map length (2 octets): nombre d'entrée dans la table des couleurs incluse dans le fichier ;
* Color map entry size (1 octet): nombre de bit par pixel.
Au cas où toute la table des couleurs n'est pas réellement utilisée par l'image, une valeur non-null dans First entry index, permet de ne stocker que la partie nécessaire de la table des couleurs dans le fichier.
Image specification (champ 5)
Il y a six sous-champs :
* X-origin (2 octets): les coordonnées absolues du coin inférieur gauche pour les écrans dont l'origine est en bas à gauche ;
* Y-origin (2 octets): comme pour X-origin ;
* Image width (2 octets): largeur en pixels ;
* Image height (2 octets): hauteur en pixels ;
* Pixel depth (1 octet): profondeur de couleur en bits par pixel ;
* Image descriptor (1 octet): les bits 3-0 donne la profondeur du canal alpha, les bits 5-4 donne la direction.

### Image and color map data

| Champs n$^o$ | Taille | Champ | Description |
| 6 | donné par le champ ID length | Image ID | champ facultatif contenant des informations d'identifications |
| 7 | donné par le champ map specification | Color map data | Table de correspondance contenant les données de la palette |
| 8 | donné par le champ specification field | Image data | Stocké selon le champ Image descriptor |