1

Bonjour tout le monde, jai ecrit un programme qui ouvre puis s'auvegarde les fichier ppm, il marche nikel, mais il décone avec certainnes images, il affiche qu'une partie de l'iamge et l'autre partie en blanc.
j'ai déroulé mon programme pat à pat jusqu'au pixel ou les problème commence et j'ai vu que
le fgetc() recupère EOF sans atteindre la fin du fichier.

tromb Fichier joint : testimg.ppm
voila le genre d'image où mon programme décone.

voilla l'image original en jpg


et l'image résultat en jpg



est ce que quelqu'un à une idée d'où vient le probleme merci les amis.

2

déjà tes pixels sont décalés (essaye d'alterner entre les deux images pour t'en rendre compte), donc ça vient peut-être de là... (genre le programme se mange une EOF parce qu'il a voulu lire une ligne en trop, du coup il plante et le fichier est tronqué même si le programme avait écrit toute l'image)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

3

non je pense pas, puisque je connais le nb de lignes et de colonnes

int r,g,b;
for (i=0;i<nbrow;i++)
for (j=0;j<nbrow;j++)
{
r=fgetc(file);
g=fgetc(file);
b=fgetc(file);
}

4

(t'as pas un nbrow a la place d'un nbcol la? trifus (a moins que tu ne loade que des images carrees.. mais.. hum grin (ou que ca ne soit pas un c/c de ton code ^^)))
avatar
HURRRR !

5

non c juste une erreur d'ecriture

int r,g,b;
for (i=0;i<nbrow;i++)
for (j=0;j<nbcol;j++)
{
r=fgetc(file);
g=fgetc(file);
b=fgetc(file);
}

6

ben le fait est que c'est décalé, tu t'es peut-être foiré dans la lecture des headers... prend un éditeur hexadécimal et compare le fichier de départ et le fichier d'arrivée, tu verras qu'il y a un décalage ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

7

je pense pas, puisque si s'était un décalage ça sera pour toutes les images que jai essayé, mais mois j'ai eu ce pb avec certaines images.
je vais t'expliquer un peu plus

le probleme comence quand fgetc retourne 255, et normalement le code 255 correspond à 'ÿ' mais quand je vérifi avec un editeur texte je trouve une sorte de flèche

8

nounou213 (./7) :
je pense pas, puisque si s'était un décalage ça sera pour toutes les images que jai essayé, mais mois j'ai eu ce pb avec certaines images. je vais t'expliquer un peu plus
On dirait qu'il manque un peu moins d'une ligne de pixels...
Tu fais comment pour lire les dimensions de l'image ?
avatar

9

je les recupère de l'entete du fichier
je sais que le probleme n'est pas dans les dimensions

10

On pourrait voir les fichiers non compressés ?
avatar

11

voilla mon amis: l'image original c'est le fichier testing.ppm il est déja attaché et le fichier résultat le voilla: tromb Fichier joint : result.ppm

12

Pour le décalage :
Tu sautes une ligne de trop avant les données wink
Tes retours à la ligne ne sont pas de simple '\n', vérifie que tu écris bien le fichier en mode binaire smile

Pour ce qui est blanc, il n'y a que des 0xFF dans ton fichier...
Pour t'aider, nous avons besoin du code source de ton programme. Le problème se trouve là ^^

[Édit]En fait, le problème doit aussi venir du manque de 'b' dans ton fopen ^^
Le fichier s'arrête avant le caractère 0x1A...[/Édit]
avatar

13

Voilla mon ami ce que ta demandé: tromb Fichier joint : segmentation.cpp
c'est le main

et ça est le .h

tromb Fichier joint : StdAfx.h

j'utilise vc++ 6.0

14

#eurk#

regarde plutôt la fonction de Limanus (cherche avec le forum), parce que là c'est pas très beau...
Sinon il y a 2 types de ppm, le ppm binaire et le ppm ASCII. Ton lecteur semble avoir quelques lacunes de souplesse.

15

nounou213 (./13) :
Voilla mon ami ce que ta demandé: tromb.gif Fichier joint : segmentation.cpp
c'est le main

et ça est le .h

tromb.gif Fichier joint : StdAfx.h
j'utilise vc 6.0
Toutes les indications du post ./12 devraient être suffisantes smile

Alors, pour corriger, tu peux ajouter « |ios::binary » aux lignes 25 et 135, et enlever le dernier '\n' de la ligne 139.
Je n'ai pas testé et je ne connais pas le c++... smile
avatar

16

Merci beaucoup mon ami, tu es vraiment un pro, c'etait la solution à mon problème.

je suis trés reconnaisont à tt le monde de ce forum.

voilla pour vous:

17

lol grin