Changer la couleur d'une image

Résolu
jeny87 Messages postés 8 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 25 mai 2007 - 14 mai 2007 à 09:45
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre 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

15 réponses

Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
22 mai 2007 à 15:16
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
3
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
24 mai 2007 à 22:59
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
3
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 mai 2007 à 17:46
tu veux faire un paint en gros ?

Loki
0
jeny87 Messages postés 8 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 25 mai 2007
15 mai 2007 à 15:16
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!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
16 mai 2007 à 11:18
à 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
0
jeny87 Messages postés 8 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 25 mai 2007
21 mai 2007 à 16:02
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
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
22 mai 2007 à 10:26
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
0
jeny87 Messages postés 8 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 25 mai 2007
22 mai 2007 à 14:37
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

 
0
jeny87 Messages postés 8 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 25 mai 2007
22 mai 2007 à 23:41
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
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
23 mai 2007 à 10:05
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
0
jeny87 Messages postés 8 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 25 mai 2007
24 mai 2007 à 10:50
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
0
jeny87 Messages postés 8 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 25 mai 2007
25 mai 2007 à 10:16
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
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
25 mai 2007 à 10:48
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
0
jeny87 Messages postés 8 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 25 mai 2007
25 mai 2007 à 21:16
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
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
26 mai 2007 à 19:04
aucun problème j'ai tout mon temps, je suis même plutôt débordé

Loki
0
Rejoignez-nous