Suite --> Récupération code couleur par un click souris

Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017 - 29 août 2013 à 16:15
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017 - 1 sept. 2013 à 19:22
Bonjour,

Dans mes projets j'utilise les instructions ci-dessous.
Ces instructions permettent de récupérer les couleurs d'une pictureBox après des cliques effectués par l'utilisateur.

-   Couleur = Picture1.Point(X, Y) 
-   If Couleur  = 6737049 then msgbox = "xxxxxxxxxx"
-   If Couleur = 65256 alors msgbox = "yyyyyyyy"

-   ou si vous préférés: If ..... = RGB(153,204,102)
-   ou si vous préférés: if ...... =RGB(232,254,0)


Comme le fait remarquer Mr UcFoutu, cette technique est mauvaise et ne permet pas l'exportation.

Technique proposée par Monsieur UcFoutu:

A partir de ces valeurs absolues, ont détermine les valeurs relatives (la composition, donc, de la couleur). Et on travaille ensuite sur des fourchettes de ces valeurs relatives (arithmétique)
Si entre xR% et yR% de rouge et entre xB% et yB% de vert et entre xB% et yB% de bleu, alors ...
Ce n'est que de l'arithmétique


Comme je n'ai pas compris cette technique, auriez vous l'amabilité Mr Ucfoutu ou une autre personne de me communiquer les deux ou trois instructions qui me permettront de remplacer celles que je recite ci-dessous.

-   Couleur = Picture1.Point(X, Y) 
-   If Couleur  = 6737049 then msgbox = "xxxxxxxxxx"       
-   If Couleur = 65256 alors msgbox = "yyyyyyyy"               

-   ou si vous préférés: If ..... = RGB(153,204,102)
-   ou si vous préférés: if ...... =RGB(232,254,0)


Cette question à déjà été posée ---> http://codes-sources.commentcamarche.net/forum/affich-10003932-recuperation-code-couleur-par-un-click-souris
Comme les réponses qui sont faites ne correspondant plus à ma question initiale, j'ai décidé d'ouvrir une nouvelle rubrique.

Merci encore.

7 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
Modifié par cs_ShayW le 29/08/2013 à 17:04
Salut

ton problème est la couleur du pixel diffère un peu
donc rgb varie un peu
ce que te propose Ucfoutu c'est de calculer les valeurs comprises
pour r g b
ex
Couleur = Picture1.Point(X, Y)
on retrouve les valeurs de rgb
disons r = 125
g = 205
b = 45
maintenant ces valeurs te servirons de valeurs relatives
c.a.d
r1 = 98%* r , r2 = 102% *r

il faut verifier que 0= < r1 et r2 <= 255
pareil pour g et b
la condition
dim rcolor as byte
dim gcolor as byte
dim bcolor as byte
if ( rcolor >= r1) and ( rcolor <= r2) and  ( gcolor >= g1) and ( gcolor <= g2) and  ( brcolor >=b1) and ( bcolor <= b2) then 
0
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
30 août 2013 à 12:22
Bonjour,

Désolé mais je n'ai pas compris la méthode de calcul de R1,R2,G1,........

--------------------------------------------------------------------
R1 = 98% * r
R2 = 102% * r
G1 = ...................

if faut vérifier que 0 = < R1 et R2 <= 255 (et après vérification ?)
--------------------------------------------------------------------

J'ai regardé la fonction ABS sans pour autant comprendre la méthode ci-dessus

Je vais encore chercher un peu, et si je ne trouve pas alors j'abandonnerais !

Merci encore
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 août 2013 à 13:25
Ce n'est (déjà dit) que de l'artihmétique et c'est simple.
Exemple :
r = 200
g = 150
b = 27
t = r + g + b
pourcentr = (r / t) * 100
pourcentg = (g / t) * 100
pourcentb = (b / t) * 100
MsgBox RGB(r, g, b) & " contient " & vbCrLf & pourcentr & " % de rouge" & vbCrLf & pourcentg & " % de vert" & vbCrLf & pourcentb & " % de bleu"

reste à exprimer un écart max admissible pour identifier une couleur et des expressions conditionnelles pour vérifier si dans la bonne "fourchette"...
Mais je commence à craindre que tu ne possèdes pas l'esprit mathématique (avant même le développement).
Je suis alors prêt à te proposer autre chose de plus "visuel" et sans arithmétique, mais il me faudrait connaître mieux ton appli et notamment le nombre de couleurs maximum à y différencier.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 30/08/2013 à 15:21
Pour résumer (et si, comme je le pense, les couleurs "lues" sont actuellement celles affichées et donc dépendantes de la configuration) :
Ne sont alors envisageables que des méthodes lentes : celle des pourcentages, celle d'une mémorisation d'un point par région (et examen de si couleur identique) et celle de la lecture des valeurs dans un fichier (ne dépend pas de la config, mais nécessite pas mal de code assez évolué supplémentaire).
Le mieux et de loin le plus performant (si cette appli est destinée à être déployée sur d'autres machines) est d'en revoir carrément la conception, depuis son tout début. Il est certain que tout serait parfait si étaient créées des régions (fonction CreatePolygonRgn de l'Api de Windows). Il suffirait alors de la fonction PtInRegion de l'Api de Windows pour déterminer si un point se trouve ou non dans une région spécifique. Le tout sans même se soucier des couleurs !
Je peux comprendre que tu n'aies point envie de tout recommencer, mais ce sera alors au prix de rafistolages peu orthodoxes et sources de lenteurs significatives.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 août 2013 à 15:37
Une autre solution (mais ce sera encore du bidouillage).
Construire un fichier texte concernant un point par "région"
Pour chaque point : 3 champs : abscisse, ordonnée et nom de la région
A partir de ce fichier texte (et à l'ouverture d'une session) ===>> charger un tableau à 3 dimensions
Au clic : relever la couleur et parcourir le tableau et pour chaque point (abscisse + ordonnée) : vérifier si ce point (dans le dessin et à ces coordonnées) est de la même couleur que celle du clic : si oui : c'est la région apparaissant en 3ème colonne du tableau parcouru.
Mais je n' "encense" pas un tel mécanisme, hein ...
0
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
30 août 2013 à 16:24
Bonjour Mr UcFoutu,

Pour vous éclairer sur ce logiciel, je vais vous citer quelques chiffres:
- 12 Programmes
- 156 Forms
- 27 Modules
- 245700 instructions
- 172 Cartes (Bmp)

J'ai également développé un outil pour modifier les contours des
et la couleur des Pays Régions et .....

Rien que pour la carte des régions des Etats-Unis (qui apparaît comme n'ayant qu'une seule couleur), il y a en réalité:
- 50 couleurs Cyan différentes variant de 16776449, 167776450, ... 451, ....452 jusqu'a 16776498

Ce logiciel à été utilisé dans la famille sur des PC tournant sous:
- Windows XP
- Windows Vista
- Windows 7

Si les modifications pouvant être apportées avaient été simples, je me serais alors lancé dans une réfection technique
mais pour revoir l'architecture de ce logiciel, je laisse tomber.

Encore Merci, j'espère que vous me comprennez
Merci également à Mr Cs_Shayw
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 30/08/2013 à 16:34
Si ce projet et cette manière de traiter ne sont pas abandonnées, voilà un autre bidouillage possible
Tout en haut du form, dessiner une ligne composée d'autant de points que de "régions". A chaque point (et dans l'ordre de numérotation des départements) : attribuer la même couleur que cette du département concerné.
Au clic sur la picturebox : balayer la ligne jusqu'à trouver la même couleur. L'abscisse trouvée sera le N° du département à chercher.
Je n'ai aucune autre idée de bidouillage valable. Seul le traitement de régions serait orthodoxe.
Bonne chance.
0

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

Posez votre question
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
30 août 2013 à 17:38
Encore beaucoup trop compliqué à réaliser.

Sont concernés:
- Des Continents
- Des Mers, des Océans
- Des Pays
- Des Régions
- Des Départements
- Des Villes
- Des Fleuves, des Lacs
- Sans parler des récapitulatifs avec graphiques que j'ai pu réaliser grâce à votre aide.

Ces modifications sont trop complexes et toucheraient un grand nombre de Forms

- Ajout d'une ligne de points dans la Form
- Ajout d'une table de correspondance
- Modification du Traitement.

Et cela pour plus d'une centaine de Forms (172 Cartes)

La programmation est uniquement un passe temps agréable, rien de plus.

Je préfère passer à autre Logiciel ce qui peut-être me permettra de poser d'autres questions sur ce site.

J'abandonne, trop compliqué.

Encore Merci.

Cordialement.
0
denisbertin Messages postés 245 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 13 mai 2023 1
1 sept. 2013 à 17:25
Cher monsieur pour obtenir une valeur relative tu fait

if (abs(getrvalue(une_couleur)-getrvalue(deuxiemeune_couleur))<delta)
and (abs(getgvalue(une_couleur)-getgvalue(deuxiemeune_couleur))<delta)
(abs(getrbvalue(une_couleur)-getbvalue(deuxiemeune_couleur))<delta) then

ou delta en un nombre entre 0 et 255.
0
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
1 sept. 2013 à 19:22
Bonjour Mr. denisbertin,

Votre méthode de calcul relative aux valeurs absolue me permettra peut-être de solutionner mon problème.

Je vais immédiatement faire des essais.

Merci pour votre support

Cordialement.
0
Rejoignez-nous