Avant de parler des formats d'image, voici un tableau comparatif des tailles en octets de 4 types d'images codées en BMP (avec ou sans compression RLE), JPEG(compression avec perte), GIF et PNG (compression sans perte), FWA et FWC(nos formats utilisés pour des jeux).
Lorsque le codage de l'image est possible, la taille en octet du fichier est indiquée, suivie du pourcentage par rapport au fichier Bitmap entre parenthèses. Pour une image donnée, le format qui occupe le moins de place est mis en caractères gras.
L'image bitmap en codage RGB windows va nous servir de référence, puisqu'elle code l'image sans la compresser. Sa structure est en gros la suivante : En-tête / Palette / Suite de pixels. Elle peut s'appliquer à tout type d'images : monochrome (1 bit par pixel), 16 couleurs (4 bits/pixel), 256 couleurs (8 bits par pixel, c'est-à-dire un octet par pixel) et 16 777 216 couleurs (24 bits par pixel, c'est-à-dire 3 octets par pixel pour indiquer ses intensités en rouge, vert et bleu).
L'image bitmap peut aussi avoir un codage RLE qui semble ne pouvoir s'appliquer que pour les images 16 ou 256 couleurs. On voit dans le tableau qu'elle a le défaut de la compression RLE : la taille du fichier augmente de 2% pour l'image 256 couleurs qui ne possède pas beaucoup de pixels consécutifs identiques. Par contre pour l'image 16 couleurs où c'est le cas, on obtient un bon résultat : la taille est divisé par 2.
Le format JPEG ne peut être utilisés qu'avec des images 16 millions de couleurs et pour cette raison, sert souvent aux photos. Si la compression de l'image est très élevée, la qualité de l'image est diminuée : en effet, à l'enregistrement, l'image est modifiée pour que les pixels proches aient la même couleur. Il faut donc savoir équilibrer entre un bon taux de compression et une bonne qualité (un taux 50% par exemple).

Les formats GIF (Graphic Interchange Format) et PNG (Portable NetWork Graphics) sont assez similaires. Ils compressent ainsi à l'aide de l'algorithme LZW des images monochromes, 16 et 256 couleurs voir 16 millions pour PNG, pouvant avoir une couleur transparente (les pixels transparents ont la couleur du fond comme dans nos smileys). On remarque que cette compression est généralement meilleure pour le PNG. Par contre, le format GIF possède en plus la qualité de pouvoir contenir plusieurs images et donc de faire des GIF animés. Il existe des images du même type que PNG appelée MNG (Multiple-Image NetWork Graphics) qui permettent des animations mais malheuresement elles ne sont pas reconnue par les navigateurs.
GIF : 44103 octets | MNG : 34289 octets
Une autre possibilité pour ces images : elles peuvent toutes deux être entrelacées. Dans ce cas, on ne respecte pas l'ordre d'affichage des lignes de l'image, celle-ci est d'abord floue puis apparaît en entier ce qui permet de faire patienter les visiteurs d'un site internet. Cependant, cette méthode diminue le taux de compression de l'image puisque la compression se fait ligne par ligne et non sur toute l'image.
Ces deux types de fichier inventés par Frédéric WANG ont une structure identique qui lui permet de contenir de 1 à 65536 images de dimensions allant de 15 × 15 à 65550 × 65550. Ces images peuvent être monochromes (les deux formats sont alors exactement identiques, voir tableau), ou bien posséder 16 ou 256 couleurs prises parmi notre palette FWS, ainsi que posséder une couleur transparente. Chaque images du fichier est généralement compressées grâce à l'algorithme LZW (avec des séquences pré-apprises et des mots dynamiques), et le FWC dispose en plus d'un codage de type RLE.
Le FWA, dont le taux de compression est comparable à celui du GIF ou PNG, nous sert pour les images qui ne peuvent être codées en FWC. En effet, en 16 et 256 couleurs, ce dernier format n'est utilisable que pour certaines images spécifiques (que l'on utilise pour nos jeux). Mais lorsqu'une image peut être codée en FWC, le fichier occupe moins de place que les autres formats...
GIF : 925 octets | PNG : 973 octets | FWA : 917 octets | FWC : impossible
GIF : 1788 octets | PNG : 1553 octets | FWA : 1653 octets | FWC : 1239 octets
Il est intéressant pour le programmeur de savoir faire un éditeur d'image. Je vous propose d'étudier le programme Img_Rle.BAS (compression.zip, 9 ko) qui enregistre une image 256 couleurs dessinée à l'écran du QBASIC (il n'y a donc pas de palette dans le fichier puisqu'on conserve la palette par défaut du mode SCREEN 13 du QBASIC) à l'aide de l'algorithme RLE. Le résultat avec l'image que je vous propose est assez satisfaisant (de l'ordre de 40% de la taille de l'image d'origine)
La Structure du fichier MonImage.dat est très simple :
Maintenant, à vous de programmez ! Voici une petite liste d'idée de programmation :