Changer la couleur d'une image [Résolu]

Messages postés
8
Date d'inscription
lundi 14 mai 2007
Dernière intervention
25 mai 2007
- - Dernière réponse : Loki6
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
27 décembre 2009
- 26 mai 2007 à 19:04
Bonjour à tous,

Je suis nouvelle sur ce forum pour la simple raison que je viens de commencer mon projet info, je dois raliser un programme en C++ " changer la couleur d'une image"; et je suis vraiment nul en C++ . Je voudrais savoir si vous pouviez m'aider en me donnant des pistes ou des mots clés pour créer une pallete de couleur ainsi qu'introduire une pipette?

Merci à tous!!! bonne journée


Jeny
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
27 décembre 2009
3
Merci
tu crées un pointeur sur un device context qui n'est pas initialisé. autrement dit GetPixel() cherche dans le vent. le paramètre 1 de GetPixel() doit être le même que celui sur lequel tu affiches ton image, sinon ça ne sert à rien.

Plutôt qu'un int, déclare ta variable Couleur_Clic du type COLORREF. la seule différence est que c'est un unsigned int au lieu d'un int (normal les couleurs négatives ça n'existe pas encore).
mais c'est également mieux pour s'y retrouver. tu vois que les COLORREF sont des couleurs au simple coup d'oeil.

enfin pour voir si Couleur_Clic est plausible, tu peux simplement bidouiller un CString et l'afficher dans une MessageBox() :

CString Couleur_str;
Couleur_str.Format(TEXT("R : %d,\nG : %d,\nB : %d"),
    GetRValue(Couleur_Clic),GetGValue(Couleur_Clic),GetBValue(Couleur_Clic));
MessageBox(NULL,Couleur_str,TEXT("Couleur du pixel sélectionné"),MB_OK);

ou plus sympa, faire apparaître un rectangle de la couleur sélectionnée, mais plus long aussi.

tiens moi au courant.

Loki

Merci Loki6 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Loki6
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
27 décembre 2009
3
Merci
de rien ce fut un plaisir !

c'est nickel si ça marche alors. je veux bien que tu me fasses passer
ton code si t'y vois pas d'inconvénient pour regarder comment tu as
fait car en réalité je n'ai jamais fait ce genre de trucs...

bon alors pour la pipette je suppose qu'il s'agit d'un curseur en forme de pipette ?
dans ce cas c'est très simple :
il y a une fonction qui ressemble à LoadCursor(), regarde dans la msdn comment l'utiliser. ensuite, il existe peut-être des curseurs pipettes préexistantes, mais sinon tu peux t'en créer une directement sous visual avec les outils de dessin et même en gérant la transparence !

je n'ai plus visual sur cet ordi pour l'instant (cause formatage) mais si tu trouves pas je te donnerai plus d'indications demain.

bonne continuation

Loki

Merci Loki6 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de Loki6
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
27 décembre 2009
0
Merci
tu veux faire un paint en gros ?

Loki
Commenter la réponse de Loki6
Messages postés
8
Date d'inscription
lundi 14 mai 2007
Dernière intervention
25 mai 2007
0
Merci
En fait j'ai commencé par faire un programme capable de charger une image , de la visualiser et de la sauvegarder. Maintenant le plus dure reste à faire, je dois ,une fois l'image affichée , pouvoir cliquer sur une de ses couleurs, là, une palette de couleur s'affiche, et l'utilistateur doit choisir la nouvelle couleur qui remplacera la précédente...
On m'a conseillé d'utiliser CColorDialog, ms je ne vois pas du tout comment faire le lien,entre le clic sur la couleur de l'image et l'ouverture de la boite de dialogue!!!
Commenter la réponse de jeny87
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
27 décembre 2009
0
Merci
à chaque clic sur ta zone image, déclenche une fonction (évènementielle) tu récupères la position de la souris, tu en déduis la position et la valeur du pixel sur lequel tu as cliqué et tu modifies ton image.

Loki
Commenter la réponse de Loki6
Messages postés
8
Date d'inscription
lundi 14 mai 2007
Dernière intervention
25 mai 2007
0
Merci
Merci pour ta réponse Loki, ms je ne vois pas comment récupérer les valeur RGB de mon pixel? y a t-il une fonction? j'ai vu qu'on pouvait utiliser GetRValue , GetGValue et GetBvalue? ça peut marcher ac ça? si oui pourais tu m'expliquer comment les utiliser, par raport aux coordonnées de ma souris?

merci beaucoup
Commenter la réponse de jeny87
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
27 décembre 2009
0
Merci
là comme ça je ne sais pas s'il existe des fonctions pour récupérer un pixel à l'écran, il faudrait faire quelques recherches sur la msdn et sur le net, mais tu as toujours la solution de faire une transformation de repère pour passer les coordonnées écran en coordonnées image, ensuite tu tapes dans ton tableau de pixels au bon endroit.

mais tu devrais chercher un peu je pense qu'il doit y avoir quelque chose de tout près qui existe déjà.

les fonctions que tu m'as citées sont utilisables lorsque tu possède une variable contenant ta couleur. regarde sur la msdn à COLORREF et RGB qui sont deux macros. ces fonctions te donnent donc la possibilité de récupérer une valeur sur le total mais pas à partir d'une coordonnée. je pense qu'il faut plus se diriger vers du GetPixel ou GetPoint ou autre je ne sais pas trop ce qu'il existe.

bon courage et tiens moi au courant.

Loki
Commenter la réponse de Loki6
Messages postés
8
Date d'inscription
lundi 14 mai 2007
Dernière intervention
25 mai 2007
0
Merci
Donc j'ai fais un truc avec avec GetPixel comme tu me l'as conseillé , ça compile le pb , c'est que je n'ai aucun moyen de vérifier si ça marche, de plus quand je clic ça me ferme tout de suite la fnêtre, j'ai dû oublier quelquechose... pourrais tu me dire si mon code peux fonctionner?


void



CProjetView::OnLButtonDown(UINT nFlags, CPoint point){


int
PosX;


int
PosY;

PosX=point.x;

PosY=point.y;

HDC hdc;


int
Couleur_Clic;

Couleur_Clic = GetPixel(hdc,PosX,PosY);

CView::OnLButtonDown(nFlags, point);

}


merci d'avance

 
Commenter la réponse de jeny87
Messages postés
8
Date d'inscription
lundi 14 mai 2007
Dernière intervention
25 mai 2007
0
Merci
Pour mon hdc j'ai réglé mon pb, merci bocoup , par contre quand je clic sur mon image, j'ai bien la fenétre qui s'ouvre, ms les valeur de RGB restent toujours a 255, dc je sais pas si c'est un pb de mon code ou pas...

J'ai une autre petite question ( je suis désolée de te déranger sans arrêt ms rassure toi mon projet se termine bientôt  ), il faudrait maintenant que j'éffectue un balayge de mon imagepour reconnaitre tous les pixels qui ont la même RGB que celui sur lequel j'ai cliqué.
Pour cela j'ai fais une double boucle pour balayer sur la largeur et la hauteur. il faut donc que je fasse ensuite un if " les coordonnée du nouveau pixel sont les même" alors "je change aussi sa couleur". non?
Enfin si l'idée est celle la, comment je déclare les nouvelles coordonnées des pixels que je vais balayer? je n'arrive pas a me représenter la chose yen a telement)...

merci encore:::

jennifer
Commenter la réponse de jeny87
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
27 décembre 2009
0
Merci
si ton image est blanche, oui c'est normal... sinon c'est qu'il y a un problème dans le code, que tu ne récupères pas ou n'affiches pas les bonnes valeurs de couleur de pixel.

pour ta question, si le but est de modifier la couleur de chaque pixel correspondant au pixel sélectionné alors en effet tu as fait le bon raisonnement.
je ne comprends pas où tu bloques.

Loki
Commenter la réponse de Loki6
Messages postés
8
Date d'inscription
lundi 14 mai 2007
Dernière intervention
25 mai 2007
0
Merci
C'est bon j'ai réglé le problème et mon programme marche !! c'est génial!! tu y es pour beaucoup!! merci
Mais mtn, je voudrais l'arrenger un peu, tu ne connaitrais pas une fonction pour afficher une pipette? car je ne trouve rien sur le net.
merci encore!!!




jennifer
Commenter la réponse de jeny87
Messages postés
8
Date d'inscription
lundi 14 mai 2007
Dernière intervention
25 mai 2007
0
Merci
ya pa de soucis je peux te le passer ms , je fais comment, pour tout t'envoyer les .h et .cpp? par mail? ( j(ignore comment vs faites d'habitude)

jeny
Commenter la réponse de jeny87
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
27 décembre 2009
0
Merci
penses à mettre réponse acceptée si tout fonctionne bien.
au cas ou tu connaisses pas je t'ai envoyé un MP (message privé) tu peux les consulter tout en haut à droite, le bouto Messages.
++

Loki
Commenter la réponse de Loki6
Messages postés
8
Date d'inscription
lundi 14 mai 2007
Dernière intervention
25 mai 2007
0
Merci
j'éffectue encore quelques perfectionnement à mon programme et je te l'envoie lorsqu'il est complet ( cad mardi ou mercredi) ça te vas ou tu préfère plus rapidemment?

jeny
Commenter la réponse de jeny87
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
27 décembre 2009
0
Merci
aucun problème j'ai tout mon temps, je suis même plutôt débordé

Loki
Commenter la réponse de Loki6

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.