Bonjour.
Dans le cadre d'un travail, je dois effectuer des transformations sur des fichiers de type BMP. Suivant un algorithme particulier, je dois transformer l'image dans une boucle jusqu'à retrouver l'image de base. Chaque image sera individuellement enregistrée dans un nouveau fichier qui sera à nouveau traité.
Après moult essais, je constate quelques problèmes au niveau de la simple ouverture de mon fichier bitmap, lecture de celui-ci et réécriture dans un nouveau fichier.
En effet, pour la réécriture de mon fichier se fait en 2 étapes.
1. Je prends l'entête du fichier bmp (soit 54 octets) que je réécris dans mon fichier.
2. Je prends le reste du fichier (taille de 256*256*3 octets (chaque pixel étant codé sur 3 octets), soit 196608 octets)
Lors de la réécriture de l'entête dans mon nouveau fichier, je n'ai aucun problème.
Lors de la réécriture du reste de mon fichier à partir de la fin de l'entête, j'ai quelques problèmes.
Je passe tout d'abord par un tableau alloué dynamiquement avec cette ligne, sizemalloc étant égal à 256*256*3Je lis ensuite mon fichier à partir de la 54ième position de mon fichier BMP (le fichier étant composé de 256*256*3+54 octets de données (entête + données))
Code : Sélectionner tout - Visualiser dans une fenêtre à part char* tab = (char*) malloc(sizemalloc);
Il apparait que l'image enregistrée est déformée par rapport à l'image d'origine, les couleurs déplacées et j'en passe. Le fichier comporte en plus une taille un peu plus grosse (663 octets)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // On se positionne à la fin de l'entête fseek(origiBMPFile, 54, SEEK_SET); // On copie complètement le contenu du fichier, à partir de l'entête dans le tableau; fread(tab, 1, sizemalloc, origiBMPFile);
En effectuant une analyse hexadécimale parallèle de mon fichier BMP original et de mon fichier BMP créé, il apparait que certains caractères particuliers se glissent lorsque mon fichier est recopié. En effet, à chaque fois que je rencontre le caractère "0a", le caractère "0d" vient s'insérer juste devant.
Ces caractères correspondent aux caractères "Saut de ligne" et "Retour chariot".
J'aimerais comprendre pourquoi justement ce caractère Carriage Return vient s'insérer dans mon code.
Je passe toujours par un fread pour lire et un fwrite pour écrire. J'avais essayé une technique avec un fgetc et un fputc, mais elle ne fonctionnait par pour lire et écrire dans le fichier, d'où la raison pour laquelle je suis passé par un fread et un fwrite.
Pouvez-vous m'aider à résoudre ce mystère ? D'avance je vous remercie.
Cordialement,
Gandalf2008
Partager