Je ne pense pas que vous pourrez m'aider facilement, il s'agit d'un problème de lecture d'images au format PPM et PGM, où justement mon programme consiste à lire et écrire des images dans plusieurs formats différents (dont .ppm et .pgm). Mon problème est que je n'arrive pas à lire des images en utilisant mes fonctions readPGM (qui fait partie d'une classe GrayImage) et readPPM (qui fait partie d'une classe ColorImage), dès que j'essaye de la lire, puis de la re-écrire (pour les méthodes d'écriture des images je n'ai pas de problèmes) en exécutant le programme, je tombe sur une boucle infinie, et ça fait depuis plusieurs heures que j'essaye de trouver le problème... mais sans succès Du coup si vous arrivez à trouver la cause du problème ou autre, ca serait très sympa de votre part, je vous remercie d'avance
Image.cpp (méthodes de lecture) :
// Pour lire une image au format .pgm
GrayImage* GrayImage::readPGM(istream & is){
char c[3];
is.get(c[0]);
is.get(c[1]);
is.get(c[2]);
if(!(c[0]=='P' && c[1]=='5' && c[2]=='\n')){
throw runtime_error("This is not a PGM image or the file doesn't exists !");
}
skip_comments(is);
uint16_t w, h;
is >> w >> h;
is.get();
skip_comments(is);
uint8_t max_c;
is >> max_c;
is.get();
GrayImage *g = new GrayImage(w,h);
is.read((char*)g->array, w*h);
return g;
}
// Pour lire une image au format .ppm
ColorImage * ColorImage::readPPM(istream & is){
string s;
getline(is, s);
if (s != "P6") {
throw std::runtime_error("This is not a PPM file");
}
skip_comments(is);
uint16_t w, h;
is >> w >> h;
is.get();
skip_comments(is);
uint8_t max_c;
is >> max_c;
is.get();
ColorImage *ci = new ColorImage(w, h);
is.read((char*) ci->array, size_t(w*h*3));
return ci;
}
Puis la partie du main où je créé l'instance et tout pour lire/écrire les images :
cout << "Votre identifiant tel que declare dans Image.cpp : " << identifier << endl;
cout << "Les informations que vous avez decide d'indiquer au correcteur : " << endl << informations << endl;
//image.clear(128);
Color color1(180,180,180);
Color color2(128,255,255);
//ColorImage *img = new ColorImage(400,300);
ifstream x("data/chat_petit.ppm", ios::binary);
ofstream y("data/test.ppm", ios::binary);
ColorImage *img = ColorImage::readPPM(x);
//img->clear(color1);
img->rectangle(20, 40, 20, 40, color2);
img->fillRectangle(80, 20, 80, 20, color2);
//img->pixel(10,10) = 255;
//img.GrayImage::pixel(10,20) = 255;
//img->writePGM(y);
img->writePPM(y);
delete img;
Si vous avez besoin de toute mes fichiers au cas où ça suffirait pas, les voici :
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.