comment fonctionne ce programme? - C++ - Programmation
Marsh Posté le 04-01-2012 à 21:13:35
Qu'est-ce que tu ne comprends pas ? (mets les balises pour le code, c'est plus clair)
Marsh Posté le 04-01-2012 à 21:29:24
comment faire apparaitre l'image modifier sur the gimp en utilisant ce code
Marsh Posté le 04-01-2012 à 21:45:35
Non, ce programme n'a aucun rapport avec the Gimp, c'est pas une DLL
Tout ce qu'il fait c'est un petit traitement tout seul comme un grand, le format qu'il manipule peut être lu sur Gimp mais c'est tout
Marsh Posté le 04-01-2012 à 22:23:05
Le programme n'affiche aucune image, si tu veux qu'il le fasse il faut le modifier et y implémenter la SDL ou la SFML.
après, si tu veux voir une image après modification, tu peux aussi passer par the gimp en ouvrant le fichier pgm modifié
Marsh Posté le 05-01-2012 à 11:21:15
merci mais the gimp refuse de lire mon image une fois modifier et enregistrer car l'image enregistrer n'a pas de format et je ne sait pas comment lui donner le format png ou pgm merci de vos reponses
Marsh Posté le 11-12-2011 à 12:24:56
bonjour j'ai un projet d'informatique à faire et je dois être capable de faire un tableau avec toutes les valeurs des pixels mais tout ce que je sais faire c'est ouvrir l'image avec the gimp. De plus je sais que je dois utiliser code blocks et coder en C++ pour écrire mon programme . Si quelqu'un peut m'aider ce serai sympas je suis un peu en retard sur mon projet merci.
Marsh Posté le 11-12-2011 à 14:57:11
le format PGM est decrit clairement ici :
http://netpbm.sourceforge.net/doc/pgm.html
il rete juste a implanter l'algo pour lire le dit fichier. EN C++, penche toi du coté de ifstream/ofstream et vector pour le stockage en memoire.
Marsh Posté le 13-12-2011 à 12:56:54
j'ai deja trouver ca sur internet ca correspond exactement a ce que je dois faire mais je ne comprend pas comment l'utiliser. Que dois-je faire avec mon image en pgm pour l'inclure dans le programme (j'ai bien vu la fonction lecture mais je ne comprend pas le fonctionnement). merci de votre reponse
[/#F0000E]
[#F0000E]
#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];
//ident = Variable de dÈbut des fichiers pgm ou ppm
//largeur = largeur de la matrice du fichier pgm
//hauteur = hauteur de la matrice du fichier pgm
// pixel_maxi = chuiffre maximum qu'un pixel peut avoir
//i = ligne de la matrice
//j = colone de la matrice
//tab = tableau dans lequel on va placer les chiffres des pixels
//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;
}
Marsh Posté le 13-12-2011 à 18:52:01
Ben sous peine que ce programme marche (j'ai absolument pas vérifié), lorsque tu le lances un menu devrait apparaitre tu fais : "0" puis "Entrée", à ce moment là, il te demande le nom de ton image (qui doit se trouver dans le même répertoire que celui depuis lequel tu lances ton programme).
Une fois que tu lui a donné le nom, il charge l'image et retourne au menu de départ pour te permettre d'effectuer d'autres traitements (luminosité, découpe ...)
[EDIT] D'ailleurs fait gaffe, la taille maximale de ton image (vu comment est conçu le programme) est de 600x600 pixels !
Marsh Posté le 15-12-2011 à 12:47:26
bonjours je suis entrain de creer un programme en c++ pour le traitement d'une image format pgm et je cherche une fonction capable de pixeliser mon image en pixels de taille reglable.
donc si quelqu'un a une telle fonction ou sait comment la programmer je veux bien de l'aide merci.
Marsh Posté le 21-12-2011 à 11:37:24
bonjours a tous jai réaliser un programme en c++ pour le traitement d'une image en pgm les differrentes fonctions de ce programme permette de lire l'image, l'enregistrer, inverser la valeur de pixels, de faire varier le luminosité et de découper l'image. Malheureusement il semblerait que jai fait des erreurs de programmation et malgrés mes nombreuses tentative je n'arrive pas a les comprendre et les trouver. Donc si vous vouliez bien m'aider a retrouver mes erreurs dans le code suivant je vous en serais reconnaissant merci.
#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];
//ident = Variable de dÈbut des fichiers pgm ou ppm
//largeur = largeur de la matrice du fichier pgm
//hauteur = hauteur de la matrice du fichier pgm
// pixel_maxi = chuiffre maximum qu'un pixel peut avoir
//i = ligne de la matrice
//j = colone de la matrice
//tab = tableau dans lequel on va placer les chiffres des pixels
//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;
}
Marsh Posté le 21-12-2011 à 11:53:24
banjo16 a écrit : jai fait des erreurs de programmation |
mais quel genre d'erreurs ?? ça ne compile pas, ou ça marche mais une fonction ne fait pas ce que tu veux ? etc
Marsh Posté le 21-12-2011 à 12:11:53
banjo16 a écrit : ca ne compile pas |
tu peux copier tes erreurs ?
sinon tu devrais indenter ton code, car il est illisible.
Marsh Posté le 21-12-2011 à 12:37:41
je vous avoue que je ne suis que debutant dans la programmation je ne comprend pas ce que vous voulez dire par copier les erreur ni indenter mon code dsl
Marsh Posté le 21-12-2011 à 12:46:08
après recherche de la définition de indenter voila mon 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;
}
Marsh Posté le 21-12-2011 à 23:03:15
banjo16 a écrit : je vous avoue que je ne suis que debutant dans la programmation je ne comprend pas ce que vous voulez dire par copier les erreur |
ben quand tu compiles, tu dois avoir des messages d'erreurs qui sont affichés !
Si tu les as, ça devrait pas être très dur de voir pourquoi ton programme ne marche pas ...
indenter, c'est une règle de lisibilité qui consiste à mettre des tabulations pour chaque bloc de ton code, mais tu peux pas le faire avec les messages du forum je crois. Par contre tu peux utiliser la balise cpp
Code :
|
Marsh Posté le 03-01-2012 à 18:20:36
bonjours mon professeur d'info nous a donnée un code qui devrait permettre de modifier de divers façon une image en pgm pour nous aidez a démarrer un projet d'informatique mais il semble que le code comporte des erreurs que je n'arrive pas a trouver donc si l'un d'entre vous pense pouvoir m'aider voila mon code je vous pris de bien vouloir y jeter un coup d'oeil merci.
ps: je comprendrait parfaitement que la lecture totale du code soit éprouvante n'hésiter donc pas a m'envoyer vos remarque sur le code meme sans avoir verifier son intégralité
Code :
|
Marsh Posté le 03-01-2012 à 19:18:41
Je ne vois pas ce que ce code a d’erroné, je l'ai compilé et utilisé sur une image pgm test sans problème.
A+,
Marsh Posté le 03-01-2012 à 21:03:08
merci beaucoup pour cette repose tres prompte mais pourrais tu m'expliquer comment l'utiliser a partir d'une image pgm classique et de CODE BLOCKS s'il te plait.
Marsh Posté le 03-01-2012 à 22:49:27
Je ne sais pas ce que tu appelles une image PGM classique, j'ai juste récupéré l'exemple d'image de wikipédia, feep.pgm (qui affiche feep en nuances de gris):
P2 |
Et ne n'ai pas eu le moindre problème avec (sauf que j'ai viré la seconde ligne du source de Wikipedia, un commentaire, vu que le programme de lecture manifestement n'en attend pas).
J'ai utilisé un des nombreux compilateurs C++ gratuits pour compiler le programme (celui de Digital Mars), sans rien faire de spécial.
Je l'ai compilé aussi avec g++ (mais alors il faut virer la ligne avec system, qui n'est pas dans le standard C++) et le programme a tout aussi bien marché.
Je n'utilise pas Code Blocs, dont je ne peux te renseigner à son sujet.
A+,
Marsh Posté le 05-01-2012 à 11:28:39
bonjours j'ai un programme qui a pour but de faire des modifications sur une image en pgm mais j'ai un probleme pour visualiser les images une fois modifiée. j'utilise the gimp pour visualiser les images mais une fois les images enregistrer the gimp refuse de les ouvrir. en effet une fois les images modifier elles n'ont pas de format je me demande donc comment les convertir en pgm ?ou alors peut etre qu'il y a une erreur dans mon code que je fais suivre merci de vos reponses
#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;
}
Marsh Posté le 05-01-2012 à 13:19:10
Les sujets suivant ont été fusionnés à ce sujet par Gilou
Parce qu'ici, on ne crée qu'un seul sujet par problème rencontré, et pas 6!!
A+,
Marsh Posté le 05-01-2012 à 20:08:45
DERNIER AVERTISSEMENT!
La prochaine fois que je vois un nouveau topic posant une fois de plus ce sujet (avec ou sans nouveau pseudo), c'est ban direct. Un seul topic par sujet, c'est la règle ici, comme déjà signalé.
A+,
Marsh Posté le 03-01-2012 à 21:24:35
bonjours mon prof d'info m'a donner ce programme qui a pour but de modifier une image pgm mais je ne sais pas le faire fonctionner les logiciels que j'utilise sont code blocks pour compiler le programme et the gimp pour ouvrir l'image en pgm depuis windows pourriezz vous m'aider a comprendre comment utiliser ce programme svp et merci d'avance pour vos reponses
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;
}