Stocker une image PGM dans une matrice
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:
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:
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