(C++) problème de format d'image

Fermé
etudinge Messages postés 1 Date d'inscription jeudi 5 janvier 2012 Statut Membre Dernière intervention 5 janvier 2012 - 5 janv. 2012 à 18:20
jmwurth Messages postés 2933 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 23 juin 2013 - 8 janv. 2012 à 10:56
Bonjour, mon professeur d'info m'a fournit le code c++ suivant qui a pour but de modifier une mage en format pgm. Mon problème est le suivant lorsque l'image modifier a étét enregistrer elle apparait comme sans format et je suis donc dans l'incapacité de visionner l'image modifier.

merci de vos future réponses


CODE:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

//initialisation des diffÈrentes fonctions
string ident;
int largeur, hauteur, pixel_maxi, i, j, tab[600][600];


//fonction lecture
void lecture(){
string nom_image; //variable du nom de l'image
cout << "Entrez le nom de l'image" << endl;
cin >> nom_image;
ifstream fin (nom_image.c_str());
fin >> ident;
fin >> largeur >> hauteur;
fin >> pixel_maxi;
for (i = 0; i<hauteur ;i++){
for (j = 0; j<largeur; j++){
fin >> tab[i][j];
}
}
cout<<"Image chargee"<<endl;
}



// fonction ecrire
void ecrire(){
string image_sauvegardee;
cout << "Entrez le nom du fichier de sauvegarde" << endl;
cin >> image_sauvegardee;
ofstream fout (image_sauvegardee.c_str());
fout << ident << endl;
fout << largeur << " " << hauteur << endl;
fout << pixel_maxi << endl;
for (i=0 ; i<hauteur ; i++){
for (j=0 ; j<largeur ; j++){
fout << tab[i][j] << " ";
}
fout<<endl;
}
}


//fonction luminositÈ
void luminosite(){
int degre;
cout<<"Introduisez la valeur de votre changement de luminosite " << endl;
cout<<"(Introduisez un nombre negatif si vous voulez noircir.)" << endl;
cin>> degre;
for (i=0 ; i<hauteur ; i++){ //avec ces deux boucles for on va pouvoir rajouter ou enlever un certain nombre # tous les pixels
for (j=0 ; j<largeur ; j++){
tab[i][j]=tab[i][j] + degre;
if (tab[i][j]<0){
tab[i][j]=0;
}
else if (tab[i][j]>255)
tab[i][j]=255;
}
}
}



//fonction decoupe
void decoupe(){
int x,y;
// x = position en x # partir de laquelle la matrice sera dÈcoupÈe
//y = position en y # partir de laquelle la matrice sera dÈcoupÈe
cout<<"Le processus de decoupage se fait ainsi :"<<endl;
cout<<"1) Vous choisissez le point sur la matrice a partir duquel aura lieu la decoupe (x et y)"<<endl;
cout<<"2) Vous indiquez la largeur en valeur absolue qu'aura votre matrice (de gauche a droite a partir du point choisit plus haut)."<<endl;
cout<<"3) Vous indiquez la hauteur en valeur absolue qu'aura votre matrice (de haut en bas a partir du point choisit plus haut)."<<endl<<endl;
cout<<"Introduisez l'endroit o? commencer la dÈcoupe (x,y)"<<endl;
cin >> x >> y;
cout<<"Introduisez la largeur et la hauteur de la nouvelle image"<<endl;
cin >> largeur >> hauteur;
for (i=y ; i<(y+hauteur) ; i++){
for (j=x ; j<(x+hauteur) ;j++){
tab[i-y][j-x]=tab[i][j];
}
}
cout<<"Image decoupee!"<<endl;
}



//fonction negatif
void negatif(){
for (i=0 ; i<hauteur ; i++){
for (j=0 ; j<largeur ; j++){
tab[i][j] = (255)-(tab[i][j]);
}
}
cout << "Negatif produit" << endl;
}



//fonction quitter
void quitter() {
cout << "Au revoir" << endl;
}



//fonction principale
int main (int argc, char * const argv []) {
int numero;
// numero = le chiffre entrÈ par l'utilisateur en fonction de son choix dans le menu



do {

cout << "\t \t Menu" << endl;
cout << endl;
cout << "0) Charger une image" << endl;
cout << "1) Sauvegarder une image" << endl;
cout << "2) Changer la luminosite" << endl;
cout << "3) Decouper l'image" << endl;
cout << "4) Produire le negatif" << endl;
cout << "5) Quitter" << endl;
cout <<endl;
cout << " Choisissez votre numero" << endl;
cout << endl;


cin >> numero;
switch (numero){
case 0: lecture (); cout << endl; break; // on fait appel # la fonction lecture
case 1: ecrire(); cout<< endl; break; // on fait appel # la fonction ecrire
case 2: luminosite(); cout << endl; break; // on fait appel # la fonction luminosite
case 3: decoupe(); cout << endl; break; // on fait appel # la fonction decoupe
case 4: negatif(); cout << endl; break; // on fait appel # la fonction negatif
case 5: quitter(); cout << endl; break; // on fait appel # la fonction quitter
}
if (numero>5 || numero<0){
cout << "vous avez tappe un mauvais chiffre" <<endl;
cout << endl;
}
} while (numero != 5);
system("pause");
return 0;
}
A voir également:

1 réponse

jmwurth Messages postés 2933 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 23 juin 2013 850
Modifié par jmwurth le 8/01/2012 à 10:58
Bonjour
Le format PGM (Portable Gray Map) est rare et ancien. Il n'y a guère que IrfanView et XnView à pouvoir les visualiser
0