Introduction
L'extension du fichier «.PCX» est format d'image originaire du logiciel PC PaintBrush pour le système d'exploitation DOS, lequel avait été développé par le ZSoft Corporation à Marietta, en Géorgie. Le format PCX est largement pris en charge par les applications graphiques DOS, après avoir été révisé au fil des ans pour suivre le rythme des nouvelles technologies d'affichage graphique. Il ne prenait initialement en charge que les images à base de palette monochrome et 16 couleurs. Après qu'IBM a publié sa gamme de micro-ordinateur PS/2, l'adaptateur de carte vidéo VGA est rapidement devenu la nouvelle norme d'affichage, et le format PCX a été révisé pour prendre en charge les images 256 couleurs. Le format a finalement été mis à niveau pour ajouter la prise en charge de l'imagerie de couleur en 24 bits. La structure globale du format est relativement simple, consistant en un entête de 128 octets et un Bitmap encodé en RLE. L'entête contient une zone de palette offrant de la place pour 16 triplets de couleur RVB. Lorsque l'imagerie de 256 couleurs apparu, il fut évidant que le format devait être modifié. Il a été décidé que l'entête resterait tel qu'il était écrit et que des palettes de 256 couleurs seraient ajoutées à la fin du fichier, en suivant le Bitmap.
Structure d'entête du fichier
L'entête du fichier PCX occupe les 128 premiers octets d'un fichier PCX. De nombreux champs d'entête sont d'origine et d'utilisation ésotériques et peuvent être ignorés lorsque l'entête est traité dans un programme. Dans un entête PCX, tous les champs d'entête inutilisés doivent être remplis de zéro. Voici la structure d'entête du fichier .PCX :
Déplacement | Taille | Description | |
---|---|---|---|
0 | 1 octet | Ce champ permet d'indiquer la signature du fichier, soit la valeur 0Ah. | |
1 | 1 octet | Ce champ permet d'indiquer la version du fichier PCX : | |
Valeur | Description | ||
0 | Cette valeur permet d'indiquer la version 2.5 | ||
2 | Cette valeur permet d'indiquer la version 2.8 avec palette de couleur | ||
3 | Cette valeur permet d'indiquer la version 2.8 sans palette de couleur | ||
5 | Cette valeur permet d'indiquer la version 3.0 ou supérieur | ||
2 | 1 octet | Ce champ permet d'indiquer le type d'encodage du fichier : | |
Valeur | Description | ||
0 | Cette valeur permet qu'aucune compression de l'image est présente. Beaucoup de logiciel ne supporte pas ce type d'encodage. | ||
1 | Cette valeur permet un encodage par répétition de données de PCX. | ||
3 | 1 octet | Ce champ permet d'indiquer le nombre de bits par pixels pour chaque plage de couleur. Les valeurs reconnus sont : 1, 2, 4, 8 ou 24. | |
4 | 2 octets | Ce champ permet d'indiquer la position horizontal minimum de l'image (X1). | |
6 | 2 octets | Ce champ permet d'indiquer la position vertical minimum de l'image (Y1). | |
8 | 2 octets | Ce champ permet d'indiquer la position horizontal maximum de l'image (X2). | |
10 | 2 octets | Ce champ permet d'indiquer la position vertical maximum de l'image (Y2). | |
12 | 2 octets | Ce champ permet d'indiquer la résolution horizontal, soit le nombre de points par pouce (DPI). | |
14 | 2 octets | Ce champ permet d'indiquer la résolution vertical, soit le nombre de points par pouce (DPI). | |
16 | 48 octets | Ce champ permet d'indiquer un tableau de champ 16 champs de 3 octets (Rouge, Vert, Bleu), soit 16 x 3 octets = 48 octets. Correspondant à une palette de 16 couleurs RVB. | |
64 | 1 octet | Ce champ est réservé. | |
65 | 1 octet | Ce champ permet d'indiquer le nombre de plages, soit 4 pour 16 couleurs, 3 pour 24 bits de vrai couleurs (si le nombre de bits par ligne est 8). | |
66 | 2 octets | Ce champ permet d'indiquer le nombre d'octets par ligne pour une plage. | |
68 | 2 octets | Ce champ permet d'indiquer les informations de palette sur la sortie de la palette : | |
Valeur | Description | ||
1 | Cette valeur permet d'indiquer une sortie couleur ou noir et blanc. | ||
2 | Cette valeur permet d'indiquer une sortie teinte de gris. Cette valeur est ignoré par le PC Paintbrush version IV et IV. | ||
70 | 2 octets | Ce champ permet d'indiquer le nombre de pixels que contient l'image horizontalement. | |
72 | 2 octets | Ce champ permet d'indiquer le nombre de pixels que contient l'image verticalement. | |
74 | 54 octets | Ce champ ne contient aucune valeur ou n'a pas de valeur significative. |
Structure du corps du fichier
La technique de compression est très faible, mais à l'avantage d'être peu exigeant en terme de mémoire RAM. Le schéma de codage RLE utilisé dans le format PCX est un bit impaire, en ce sens que les exécutions et les séquences sont différenciées par les deux premiers bits d'un bit plutôt que par le seul bit d'ordre supérieur le plus habituel. Il semble probable que les créateurs du format envisageaient à l'origine d'utiliser plus de deux constructions d'encodage, mais ce n'est qu'une conjecture. Dans tous les cas, un lecteur de format doit lire un octet de données et inspecter les deux bits supérieurs. S'ils sont tous les deux définis, une exécution est indiquée et les 6 bits inférieurs indiquent le nombre de fois pour répéter l'octet suivant dans le flux de données. Si les deux bits supérieurs ne sont pas définis, un compte de répétition de 1 est supposé et l'octet est une valeur de données d'image réelle. Étant donné que les comptages de répétition sont exprimés en seulement 6 bits, la valeur de comptage de répétition maximale est de 63. De plus, les octets d'image uniques dont les 2 bits supérieurs sont définis doivent être traités spécialement. Ceux-ci doivent être codés à l'aide de 2 octets pour indiquer une exécution répétée de 1 octet. Sinon, le seul octet avec les 2 bits supérieurs définis serait interprété à tort comme indiquant une répétition de l'exécution. Le format PCX est destiné principalement à l'imagerie sur écran, et la structure globale du bitmap codé est dérivée de sa représentation basée sur l'affichage. Le format dépend donc du périphérique. Par exemple, les images pour le mode 12h de la carte vidéo VGA sont codées comme des plans de bits séparés, conformément à l'organisation planaire de ce mode vidéo. Cette situation permet à une image encodée d'être décodée et affichée assez rapidement; mais cette situation signifie également que les encodeurs et décodeurs de format doivent gérer les différents modes d'affichage séparément. Une autre caractéristique du Bitmap codé est que les exécutions peuvent s'étendre à la fois sur des plans et des lignes de balayage. C'est-à-dire qu'une analyse peut s'étendre au-delà de la fin de la ligne ou du plan de numérisation en cours et passer au début de la ligne ou du plan de numérisation suivant. Bien qu'il puisse sembler que cette convention compliquerait la logique d'un codeur ou d'un décodeur, ce n'est pas réellement le cas si la logique est développée autour de cette prémisse pour commencer. Notez que les lignes de balayage individuelles sont remplies de bits inutilisés pour faire de leur longueur un nombre entier de mots de 16 bits.
Remarque
- Les noms de fichiers PCX utilisent généralement l'une des deux extensions spécifiques, .PCX ou .PCC, indiquant toutes deux le format PCX. L'extension de fichier .PCC était à l'origine destinée à indiquer une image coupée (Cut), c'est-à-dire une région rectangulaire coupée à partir d'une image d'écran complète. La distinction n'a cependant aucun sens du point de vue logiciel et peu d'applications commerciales prennent la peine de l'observer.
Voir également
Langage de programmation - Traitement d'image - Accueil