Bonjour, je veux lire une image PGM (P3 ou P5) et stocker les composantes de gris de chaque pixels dans une matrice (qui est assimilée à un tableau à 2 dimensions).
J'ai une classe matrice qui crée un tableau dynamique de la taille de l'image (largeur et hauteur en pixel), voici ma classe (enfin juste le début):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
class Matrice{
private:
   unsigned int taille_x; //Width
   unsigned int taille_y; //Height
   unsigned int **tableau; //Matrix
Je crée donc une instance de la classe avec la largeur et la hauteur de l'image et le tableau est vide, tout va bien. Ensuite j'utilise ma fonction pour lire le PGM:

Cette fonction prend le nom du fichier en paramètre, elle lit d'abord le magic number (p5 ou p3), puis les dimensions de l'image, ensuile la valeur max pour un pixel (255 niveau de gris) et enfin je lis le reste du fichier et je remplis le tableau avec les valeurs de gris:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
void Matrice::lirePGM(std::string filename){
   std::ifstream file(filename.c_str(), std::ios::binary);
   unsigned int w, h, g;
   char extension[2];
   file >> extension;
   if(extension[0] == 'P' && (extension[1]=='5' || extension[1]=='3'))
   {
       skip_line(file);
       skip_comments(file);
       file>>w>>h;
       skip_line(file);
       skip_comments(file);
       file>>g;
       if(g!=255) std::cout << "Error grayscale" << std::endl;
       skip_line(file);
       skip_comments(file);
   }
   else{
       w = h = 0;
       std::cerr << "Error PGM magic number" << std::endl;
   }
   file.read((char*)this->tableau, this->getY()*this->getX()); //Partie pour lire le reste du fichier et le stocker
   file.close();
}
Les dimensions, le magic number ainsi que la valeur max de gris marche bien mais il semblerait que la partie pour lire les pixels ne marche pas. Quand je veux afficher mon tableau il est vide et j'ai une erreur "Erreur de segmentation (core dumped)".

Je précise que j'ai testé ma fonction d'affichage sur une autre matrice (avec des valeurs aléatoires dans la matrice), elle marche bien.

Voici un screen du début de mon fichier PGM:
https://i.gyazo.com/5d4291597cd1d024...28813c9db9.png

Du coup je vois pas ce qui ne marche pas, surement dans ma lecture