Image->matrice->Copie Image (pgm) - C - Programmation
Marsh Posté le 18-03-2005 à 22:57:32
phoque !!
ma boule de crystal est encore cassée
Marsh Posté le 20-03-2005 à 10:43:12
0) t'as specifie correctement tes parametres dans le fprintf ?
1)T'as des char dans les donnees d'origine et des int dans la matrice allouee ?
2) tu t'es plante dans ta boucle ?
3) poste ton code
Marsh Posté le 20-03-2005 à 11:22:38
je parie qu'il ne lis pas toute les donnée...
pgm c'est une image couleur, donc il y a 3 char a lire pour un pixel...
Marsh Posté le 20-03-2005 à 11:36:00
pgm c'est niveaux de gris, c'est pour ca que je l'ai pris^^
je vous poste le code ce soir en rentrant
Marsh Posté le 20-03-2005 à 11:38:01
et non !
le nivreau de gris c'est ppm
Marsh Posté le 20-03-2005 à 11:41:19
KangOl a écrit : et non ! |
non, c'est l'inverse.
Marsh Posté le 20-03-2005 à 11:45:51
enfin, l'extension on s'en fout un peu
l'important c'est que le fichier soit correct...
Marsh Posté le 20-03-2005 à 11:51:00
KangOl a écrit : enfin, l'extension on s'en fout un peu |
Rattrapage aux branches detected...
Mais c'est sûr que sans code on va pas avancer des masses de toute manière...
Marsh Posté le 20-03-2005 à 11:52:50
oui, comme le chat : retombage sur mes pattes..
Marsh Posté le 20-03-2005 à 22:04:56
comme promis :
Code :
|
[edit]et voila les fichiers dde test : (pas affichables apparemment)
Marsh Posté le 21-03-2005 à 21:59:10
Je ne vois pas, mais je trouve que tu te compliques la vie avec un tableau de pointeurs sur des tableaux.
Vu que ton image est un rectangle, moi, je me contenterais d'un tableau à 1 dimension, quitte à faire une macro
#define PIX(i, j) image[(i) * n + (j)]
pour accéder à un élément donné. C'est facile de définir des fonctions facilement sur la matrice ou une ligne ou une colonne donnée de la matrice, qui faciliteront la tâche par la suite.
Marsh Posté le 21-03-2005 à 22:10:51
En cadeau une classe C++ que j'ai écrite et utilisée quand j'avais besoin de faire quelques petits calculs sur des matrices. C'est pas super optimisé mais suffisant pour des matrices jusqu'à 500x500.
(je sais, c'est du C++ et on est en cat C, mais on peut s'inspirer):
Code :
|
Et un exemple d'utilisation
Code :
|
Marsh Posté le 21-03-2005 à 22:20:22
el muchacho a écrit : Je ne vois pas, mais je trouve que tu te compliques la vie avec un tableau de pointeurs sur des tableaux. |
pourquoi pas, mais je suis habitué aux matrices^^
enfin ce n'est qu'un detail de notation, et ca ne résoudra pas mon prebleme :s
pour le C++, je n'y connais absolument rien
sinon, je me demandais si le probleme ne pouvait pas venir de la confusion char/unsigned_char (%c), mais le haut de l'image est parfaitement restitué donc je pense pas que ce soit ca...
une idée??
Marsh Posté le 21-03-2005 à 22:24:33
dark86 a écrit : pourquoi pas, mais je suis habitué aux matrices^^ |
Si parce que le code est trivial. Tu ne t'embêtes pas avec les pointeurs et les allocs. Tu as un seul tableau et un seul pointeur à gérer.
Marsh Posté le 21-03-2005 à 22:45:32
On dirait que ton programme est censé gérer des fichier .pgm ayant pour "magic number" : "P2" or ton fichier a pour "magic number" : "P5" autrement dit à la place de gérer un ficher ASCII il faudrait gérer un fichier binaire.
http://www.cs.ubc.ca/spider/ladic/text/pgm.txt
Marsh Posté le 22-03-2005 à 15:35:40
Heu, je viens de verifier, le fichier original est bien un "P5" et celui que j'ai créé par copie est aussi un P5, alors je ne vois pas où est le problème....
et en quoi mon prog gèrerait les P2 plutôt que les P5?? un problème avec les Char/unsignedChar?
Marsh Posté le 22-03-2005 à 20:54:57
Déjà tu ouvres ton fichier en ASCII, ensuite tu n'utilises que des fonctions gérant des chaînes de caractères (fscanf, fprintf)...
Enfin bref y a beaucoup de choses qu'il faudrait modifier.
Marsh Posté le 22-03-2005 à 22:51:24
Tarabiscote a écrit : Déjà tu ouvres ton fichier en ASCII, |
expliquez moi, je suis tout ouï
je ne sais pas si vous avez regardé le fichier voiture2 de sortie mais le début est parfaitement recopié, c'est ça le plus étrange...
Marsh Posté le 23-03-2005 à 19:22:20
Ben en fait le problème de l'ouverture en ASCII, c'est que comme tu n'es pas sous linux apparemment les \n sont précédé d'un \r.
Ensuite avec les fonction fscanf, fprintf dès qu'il tombera sur le caractère nul (ce qui peut arriver en binaire), il s'arrêtera.
Je te conseille de regarder plutôt du coté de fread et fwrite.
Marsh Posté le 23-03-2005 à 20:34:20
Tarabiscote a écrit : Ben en fait le problème de l'ouverture en ASCII, |
??? Tu veux dire en mode texte ?
Marsh Posté le 23-03-2005 à 20:46:24
Le truc sur les caracteres nuls correspondrait aux symptômes, je vais voir ce que je peux y faire...
Marsh Posté le 24-03-2005 à 18:18:27
j'ai dit n'importe quoi hier : ma boucle ne fait aucun test, elle ne s'arrêtera pas, meme avec un caractère nul, donc c'est autre chose le problème
Marsh Posté le 24-03-2005 à 22:41:18
Quelle boucle ?
T'as commencé à corriger ?
Bon je t'aide pour la lecture de tête je dirait qu'il faut remplacer :
for(i=0;i<n;i++)
for(j=0;j<m;j++)
fscanf(voiture,"%c",image[i]+j);
par :
for(i=0;i<n;i++)
fread (image[i], sizeof(char), m, voiture);
voire même :
fread (image, sizeof(char), n*m, voiture);
en ne faisant qu'un malloc de n*m si le but est juste de copier l'image.
Bon je fait pas tous les testes qu'il serait mieux de faire mais ça donne déjà l'idée.
Marsh Posté le 24-03-2005 à 22:50:56
Tarabiscote a écrit :
|
Attention. Toute fonction de lecture peut détecter une fin de fichier. Il faut donc tester le code retour et agir en conséquence.
Marsh Posté le 24-03-2005 à 23:05:45
J'ai dit que c'était juste pour donner l'idée et si le fichier n'est pas endommagé la taille indiquée au début devrait être correcte.
Mais bon aller autant rajouter les teste puisquon y est, je me lance :
Code :
|
Vous pouvez me dire si jen ai oublié
Marsh Posté le 18-03-2005 à 22:56:01
Bonjour,
j'ai essayé de copier une image *.pgm dans une matrice puis de relire la matrice pour crréer une copie :
j'ai récupéré les dimentions de l'image dans l'entête, j'ai alloué une matrice et fait une boucle pour copier l'iamge dedans, puis j'ai relu la mat en faisant un fprintf et quand je regarde la copie, elle fait le meme poids que l'otiginal mais seul le quart superieur a été recopié et il s'est arrété au milieu d'une ligne, le reste est gris :| (sans plantage)
Si quelqu'un a une idé de la provennance du probleme
(je n'ai pas le code ici mais je le posterai en rentrant lundi si besoin, de toute facon c'est que quelques lignes)
Message édité par dark86 le 20-03-2005 à 23:51:32