pixelgetcolor sur une image

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
littlechiki
Niveau 3
Niveau 3
Messages : 48
Enregistré le : sam. 13 avr. 2019 13:58
Status : Hors ligne

pixelgetcolor sur une image

#1

Message par littlechiki »

Bonjour,
J'ai un léger problème étant que quand j'utilise un PixelGetColor, celui-ci ne reconnais pas les images sur ma GUI. j'ai une image en position 500,500 de couleur blanche mais quand je fait un PixelGetColor, j'ai l'impression qu'il ne reconnait pas l'image et prend ce qu'il y a derrière.
Un petit exemple pour être plus claire :
#Include <GUIConstantsEx.au3>
$GUI = GUICreate("",1100,1000,350,10)
$image = GUICtrlCreatePic(".\0.gif",500,500,100,100)
$button = GUICtrlCreateButton("Couleur",10,90,70,30)
GUISetState(@SW_SHOW)
While 1
   Switch GuiGetMsg()
      Case $GUI_EVENT_CLOSE
         Exit
      Case $button
         $pix = PixelGetColor(530,530)
      MsgBox(0,"","Couleur : " & Hex($pix))
   EndSwitch
WEnd
Voila. Le code hexadécimal de la couleur trouve du gris clair (la couleur de base de ma gui plutôt que la couleur de mon image. J'aimerai que le PixelGetColor trouve la couleur de l'image plutôt que la couleur du fond.
Si quelqu'un a une idée je le remercie !

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1876
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: pixelgetcolor sur une image

#2

Message par TommyDDR »

Sans votre gif, il sera difficile de tester.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

littlechiki
Niveau 3
Niveau 3
Messages : 48
Enregistré le : sam. 13 avr. 2019 13:58
Status : Hors ligne

Re: pixelgetcolor sur une image

#3

Message par littlechiki »

Ah oui en effet je n'avais pas pensé à ça. la voici !
0.gif
0.gif (944 Octets) Vu 4376 fois
0.gif
0.gif (944 Octets) Vu 4376 fois

Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2147
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: pixelgetcolor sur une image

#4

Message par jchd »

Code : Tout sélectionner

$pix = PixelGetColor(530,530)
L'image fait 30x30, donc ce pixel est hors de l'image. Le dernier pixel de l'image (en bas à droite), c'est 529,529.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.

littlechiki
Niveau 3
Niveau 3
Messages : 48
Enregistré le : sam. 13 avr. 2019 13:58
Status : Hors ligne

Re: pixelgetcolor sur une image

#5

Message par littlechiki »

Ah d'accord je corrigerai mes longueurs. Cependant même en changeant les longueurs pour (529,529) ou même (505,505) le problème subsiste et mon code couleur ne change pas. Même en changeant la taille de l'image pour qu'elle fasse 30x30. Je dois admettre que je ne comprend pas là...

littlechiki
Niveau 3
Niveau 3
Messages : 48
Enregistré le : sam. 13 avr. 2019 13:58
Status : Hors ligne

Re: pixelgetcolor sur une image

#6

Message par littlechiki »

Bon j'ai compris d'où venait mon erreur. En fait mes dimensions x et y n'étaient pas bonnes. Je cherchais en position 500,500 alors que j'aurais du chercher aux positions (855,545) qui sont les dimensions affichées sur mon écran. maintenant, pour faire bien, il faudrait que je sache rechercher le pixel seulement dans l'écran de la GUI et non pas sur mon écran entier. Chose que je ne comprend pas comment faire puisque en en utilisant le code

Code : Tout sélectionner

$pix = PixelGetColor(530,530,$GUI)
Il me donne quand même les les dimensions de l'écran complet et non de la GUI.

littlechiki
Niveau 3
Niveau 3
Messages : 48
Enregistré le : sam. 13 avr. 2019 13:58
Status : Hors ligne

Re: pixelgetcolor sur une image

#7

Message par littlechiki »

Update :
Même en changeant le code pour
#Include <GUIConstantsEx.au3>
$GUI = GUICreate("",1100,1000,350,10)
$image = GUICtrlCreatePic(".\0.gif",500,500,100,100)
$button = GUICtrlCreateButton("Couleur",10,90,70,30)
$hWnd = WinGetHandle("GUI","")
GUISetState(@SW_SHOW)
While 1
        Switch GuiGetMsg()
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $button
                        $pix = PixelGetColor(530,530,$hWnd)
                MsgBox(0,"","Couleur : " & Hex($pix))
        EndSwitch
WEnd
Mon PixelGetColor trouve toujours le pixel de l'écran et non de ma GUI...

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 825
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: pixelgetcolor sur une image  

#8

Message par walkson »

Bonjour,
Je vous ai mis des commentaires dans le code
#Include <GUIConstantsEx.au3>

Opt("PixelCoordMode", 0)
;0 = Coordonnées relatives à la fenêtre définie
;1 = (défaut) Coordonnées absolues d'écran
;2 = Coordonnées relatives à la zone client de la fenêtre définie

$GUI = GUICreate("",250,250) ;Retourne le handle de la fenêtre.
$image = GUICtrlCreatePic(".\0.gif",100,100,50,50) ;le pic est de 50x50 donc l'image est redimensionnée à 50x50
$button = GUICtrlCreateButton("Couleur",10,90,70,30)
$hpic = GUICtrlGetHandle($image) ;handle du pic qui sera analysé
GUISetState(@SW_SHOW)
While 1
        Switch GuiGetMsg()
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $button
                  For $i = 0 To 50
                     For $y = 0 To 50
                     ConsoleWrite(Hex(PixelGetColor($i,$y,$hpic),6) &" /X "& $i &" /Y "& $y & @CRLF)
                     Next
                  Next

        EndSwitch
WEnd
;à la fin, nous avons:
;FFFFFF /X 49 /Y 49 => blanc
;F0F0F0 /X 49 /Y 50 => gris
;F0F0F0 /X 50 /Y 0
;F0F0F0 /X 50 /Y 1
;comme le fait remarquer Jchd, il faut retirer 1 pixel de la taille totale
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)

littlechiki
Niveau 3
Niveau 3
Messages : 48
Enregistré le : sam. 13 avr. 2019 13:58
Status : Hors ligne

Re: pixelgetcolor sur une image

#9

Message par littlechiki »

Oh parfait merci ! Grâce à toutes ces explications, j'ai compris et mon test est concluant !
Un grand merci car sans ces explications, je serai encore en train de pédaler dans la semoule ! :lol:

Répondre