Compression avec zlib - C - Programmation
Marsh Posté le 08-06-2006 à 16:45:40
kk c'est bien compliqué tout ça...
En gros, tu ne devrai pas avoir de problème à passer d'un fread/fwrite à un fichier compressé avec zLib.
Vérifie d'abord que tu utilise les bonnes fonctions de la librarie, car il y a tout un tas de trucs pas forcément necessaire dans zLib, comme le flush à mon avis.
Ensuite, à vue de nez, il est certainement possible que ce décalage soit dû au header de ton image. Vérifie que les fonctions load() et write() lisent et écrivent exactement le même header, avec les mêmes champs, le même nombre d'octets, etc... et que tes appels de fonctions zLib n'interfèrent pas (vire les trucs inutiles).
Marsh Posté le 02-06-2006 à 11:18:50
Bonjour,
je suis sur un projet qui demande d'enregistrer / charger des images cérébrales 3D au format NIfTI. Ce format est constitué d'un fichier contenant un header puis, toujours à partir de l'offset 352 (taille du header), les niveaux de gris de l'image.
L'enregistrement et le chargement fonctionnent parfaitement sous ce format et j'ai donc décidé de pouvoir utiliser la compression / décompression de fichiers avec zlib. Et c'est là que rien ne va plus.
En effet, après sauvegarde et compression, lorsque l'on recharge le fichier, l'image se trouve légèrement décalée. Cela n'est pas du au chargement puisque les fichiers externes dont je me sers pour tester le programme s'ouvrent correctement.
Les informations du header me semblent bien enregistrées étant donné qu'elles sont toutes récupérées au chargement. Il s'agit très certainement d'un problème à l'enregistrement des niveaux de gris de l'image.
Voici comment je les enregistre (après avoir enregistré le header) :
Ceci est l'appel de la fonction d'enregistrement des données avec comme argument le nom du fichier, la structure contenant les données à enregistrer ("image" ) et la position d'enregistrement (l'offset).
Voilà le code de cette fonction, d'où vient certainement le bug :
Le paramètre graphic est la structure contenant les données importantes sur l'image comme les dimensions (width, height, depth) ainsi que le nombre de bits par pixel (bitppixel) que l'on divise par 8 pour connaître le type de données et enregistrer les niveaux de gris (champ mri) en conséquence.
Ce même code enregistre sans aucun problème les données en utilisant les primitives fopen, fwrite, etc...
Merci à qui me répondra
Message édité par atharendil le 06-06-2006 à 10:29:32