Lire une image .ppm et inverser ses couleurs
Bonjour,
J'ai écris un programme qui fait cela avec cet algorithme, que je vous demande d'analyser svp.
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 26 27 28 29 30 31 32 33 34 35
|
if(fp){
fp >> ppm.magicnumber >> ppm.nrows >> ppm.ncols >> ppm.maxvalue;
dim = ppm.nrows * ppm.ncols;
if (ppm.maxvalue > 255){
cerr << "Invalid RGB value." << endl;
exit(0);
}
}
else {
cerr << "File specified does not exist."<<endl;
exit(0);
}
uchar r[dim], g[dim], b[dim];
//lecture des donnes
for (int i=0; i<dim;i++) {
fp >> r[i] >> g[i] >> b[i];
}
cout << "Rows : " << ppm.nrows << endl;
cout << "Cols : " << ppm.ncols << endl;
cout << "RGB : " << ppm.maxvalue << endl;
cout << "dim : " << dim << endl;
ofstream out("op.ppm");
out << "P6"<<endl;
out << ppm.nrows << " " << ppm.ncols << " " << ppm.maxvalue << endl;
for (int j=0; j<dim;j++) {
r[j]=255-r[j]; //Inversion des couleurs RGB
g[j]=255-g[j];
b[j]=255-b[j];
out << r[j] << g[j] << b[j]; //ecriture sur le fichier
} |
le fichier ppm en input est constitue de char triplets.
Le probleme c'est que mon code fait tres bien l'inversion pour ces deux photos, celle-la et celle-ci. Mais ces deux : 1 2 non, mon programme cree une image pleines de parasites (c'est comme dans une "chaine de tv qui capte pas").
Merci