Page 1 sur 1

pixelgetcolor sur une image

Posté : lun. 05 août 2019 20:35
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 !

Re: pixelgetcolor sur une image

Posté : lun. 05 août 2019 22:23
par TommyDDR
Sans votre gif, il sera difficile de tester.

Re: pixelgetcolor sur une image

Posté : mar. 06 août 2019 12:03
par littlechiki
Ah oui en effet je n'avais pas pensé à ça. la voici !
0.gif
0.gif (944 Octets) Vu 84697 fois

Re: pixelgetcolor sur une image

Posté : mar. 06 août 2019 15:52
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.

Re: pixelgetcolor sur une image

Posté : mar. 06 août 2019 18:03
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à...

Re: pixelgetcolor sur une image

Posté : mar. 06 août 2019 19:01
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.

Re: pixelgetcolor sur une image

Posté : mer. 07 août 2019 11:28
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...

Re: pixelgetcolor sur une image  

Posté : mer. 07 août 2019 17:56
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

Re: pixelgetcolor sur une image

Posté : mer. 07 août 2019 19:23
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: