libimage / fichiers

dernière mise à jour: 19 mars 2010

Cette page décrit les différents formats de fichier que sait gérer la libimage. Le format de fichier originel de cette bibliothèque est le .TGA 24 bits non compressé. Les autres ont été rajoutés par la suite, et ne sont pas aussi testés que l'originel. D'autre part, c'est dans ces fonctions que le problème du BOUTISME est le plus flagrant: en gros vous risquez le coredump sur autre chose qu'un i386.

TGA

int Image_TGA_save(char *filename, Image_Desc *img, int compress);
Le paramètre compress doit actuellement être à 0. Fonction qui ne semble plus victime de boutisme. Par contre, il manque toujours la compression.
int Image_TGA_save_component(char *nom, Image_Desc *img, char channel, int comp);
La composante channel ('r', 'g' ou 'b') sera sauvée sous la forme d'un tga monochrome avec une palette. Et il manque aussi la compression.
Image_Desc * Image_TGA_alloc_load(char *nom);
...... En gros, ça prend un fichier .TGA sur le disque, et ça le met dans une image, allouée à la volée. Les images compressées ne sont pas traitées, hélas. En détail, utsl.

haut de page

BMP

Image_BMP_save_24(char *filename, Image_Desc *img, int flag);
Sauvegarde d'une image au format BMP 24 bits non compressé (au fait, ça se compresse un bmp ?). En théorie, cette fonction est exempte des problèmes de boutisme. Hélas, un bug persistant fait que ça ne marche pas très bien.
int Image_BMP_infos(char *nom, int *pw, int *ph, int *pt, int verb);
Récupère, et éventuellement affiche (si verb!=0) quelques informations pertinentes sur un fichier bmp. Le retour *pt contient le nombre de bits par pixel.
Image_Desc * Image_BMP_alloc_load(char *nom, int reserved);
Allocation et chargement d'une image bmp. Actuellement (décembre 2003) seul quelques types sont mal supportés. Les autres ne le sont pas du tout.

Bien évidement, la mauvaise qualité de la gestion de ce format est la conséquence de la flemme de tTh. Si vous voulez voir ça de plus près, il y a un testbmp.c dans le tarball.

haut de page

PCX

En cours...
Première étape: les fichier en 16 couleurs à palette. Mais ça ne marche pas encore... Dommage, ça serait bien pour les dithering.
Deuxième étape: les images binaires, qui seront bien utiles pour les bitplanes.

int Image_PCX_fileinfo(char *nom);
Affiche toutes les informations que l'on envisage de trouver dans le header d'un fichier PCX.
int Image_wrPCX_8colors(char *nom, Image_Desc *im);
Euh, comment dire ?... Ça ne marche probablement pas.

Bien évidement, la mauvaise qualité de la gestion de ce format est la conséquence de la flemme de tTh. Si vous voulez voir ça de plus près, il y a un testpcx.c dans le tarball.

haut de page

PHT

Ce format, totalement ouvert, est une survivance du passé. Pour tout dire, ça remonte à l'Amstrad PC1512 ! Il permettait de stocker une image en niveau de gris de façon rudimentaire, mais simple et facile à lire. Chaque pixel est codé sur un octet non signé.

En-tête: +--------+
         | WIDTH  | largeur sur 16 bits à-la-Intel 
         +--------+
         | HEIGHT | hauteur (idem)
         +--------+------+
         | pppppppppp... | première ligne de pixels
         | pppppppppp... | deuxième...
    et ainsi de suite jusqu'à la fin de l'image

C'est donc un format 'monochrome', et on ne peut y mettre qu'une composante RGB, ou un canal alpha, ou n'importe quoi qui se code sur 8 bits. Vraiment rudimentaire, mais efficace sur un Amstrad PC 1512 :)

int Image_PHT_save_component(char *name, Image_Desc *i, char col);
'name' est le nom du fichier, l'extension .pht est recommandée.

haut de page

PNM

PNM est l'acronyme de Portable Net Map. Ce format est utilisé pour la communication entre une foultitude d'utilitaires de conversion de fichier images. Vous trouverez facilement de la doc dans le grand Ternet.

int Image_wr_pbm_0(char *nom, Image_Desc *im, char channel);
Sauvegarde d'une image monochrome, le seuil étant à 128. Le paramètre 'channel' est R,G,B ou A.
int Image_wr_ppm_0(char *nom, Image_Desc *im, int mode);
En théorie, le paramètre mode mis à 1 demande l'écriture d'un fichier binaire, plus petit, mais moins portable. En pratique, mode doit être mis à zéro, et on obtient un fichier ascii, qui peut être très gros.
int Image_wr_pgm_0(char *nom, Image_Desc *im, char channel);
Ecriture d'un fichier en niveau de gris du canal spécifié.

Vous pouvez aussi regarder les HF pour une autre utilisation de ce format PNM.

haut de page

FITS

FITS est un format utilisé en astronomie. Pour le moment, j'en suis à la recherche de documentation. Pour en savoir un peu plus, allez fouiller dans Eclipse et revenez me faire part de vos découvertes.

haut de page

JPEG

A la demande générale, j'ai rajouté un hack bien crade pour sauvegarder une image en jpeg. Mais il faut avoir l'utilitaire cjpeg sur votre système.

int Image_system_cjpeg(Image_Desc *img, char *fname, int quality);
img est une image RGB en mémoire qui va être convertie en Jpeg sous le nom fname avec un facteur de qualité compris entre 0 et 100. Il suffira de taper man cjpeg au prompt de votre shell favori pour en apprendre plus.

Attention, c'est vraiment un kludge, et ça risque de ne pas marcher à tous les coups...

haut de page

Points List

C'est nouveau, ça vient de sortir (enfin, il y a 8 ans que ce n'est pas fini). Et pour le moment, comme ça ne marche pas trop bien, ça ne sert à rien. En bref, ce sont des listes de points (x,y,h,v) qui seront destinées à nourrir un programme fortran qui fabriquera des height fields.

Pour être honnête, je n'ai pas la moindre idée de l'endroit où se trouve ce fameux programme fortran. Pas grave, j'en ferais un autre.

haut de page

Encapsulated Postscript

Le but premier est de construire des images utilisables par LaTeX, par exemple pour la version imprimée des Sources de Tar. La seconde étape sera de les utiliser dans des logiciels de PAO plus, ahem, institutionnels...

haut de page

liens

L'habituelle rubrique des liens:
L'excellent wotsit décrit pleins de formats de toutes sortes de fichiers. Il existe aussi un utilitaire d'exportation reprenant certains des formats décrits ici. D'autre part, Image Magick est une bonne solution à tous ces problèmes de formats de fichier pour les images.