Page 1 sur 1

[R] Gdi_plus. in REAL X ... Ça signifie quoi ?

Posté : lun. 11 janv. 2010 20:14
par SagePourpre
J'essayais de déterminer pourquoi mon graphique ne se positionnait pas correctement lorsque
j'utilise _GDIPlus_GraphicsDrawImage et je suis aller voir sur le lien msdn fournit dans l'aide.

Je suis tombé sur ceci à propos de cette fonction :
Graphics
Status DrawImage(IN Image* image, IN REAL x, IN REAL y)

Je me demandais ce que signifiais IN REAL x.

Tout ce que je sais, c'est que dans ma GUI actuelle, les coordonnées X,Y d'un input
situé à x:200, y:300 ( dans ma gui ) correspondent à x:400, y:600 lorsque je dessine une image
avec gdiPlus. Pourquoi ?

Je tente de comprendre, mais mes recherches ont cessés de progresser et je ne comprend toujours pas.
Ça vous parle ?
Si oui, ne vous gênez pas à m'en faire part.
Merci.

Re: [..] Gdi_plus. in REAL X ... Ça signifie quoi ?

Posté : lun. 11 janv. 2010 20:27
par tolf
La documentation de msdn est faite pour des langages comme le c ou le c++ où les variables ont des types (nombre entier, nombre décimal, chaine de caractère, etc...).
En autoit, il n'y a rien de tout cela : vous pouvez créer facilement une variable et lui donner pour valeur un nombre, puis une chaine de caractères sans problème, alors qu'en c++, si une variable est de type "nombre", vous ne pouvez pas lui donner une chaine comme valeur. Donc ici, la documentation indique les types de données à envoyer à la fonction (IN Image* = image GDIPLus ; IN REAL = nombre réel).

Ensuite, pour le bug, sans code minimal, ça va être dur pour nous de le résoudre :P

Re: [..] Gdi_plus. in REAL X ... Ça signifie quoi ?

Posté : lun. 11 janv. 2010 20:40
par SagePourpre
Edit : Résolu ... voir la fin de ce message pour la solution trouvée.

Dans mon code

Code : Tout sélectionner

GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")
 
et c'est ci-dessous que mon objet est créé.

Code : Tout sélectionner

; Draw PNG image
Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
    $hImage   = _GDIPlus_ImageLoadFromFile("tt.png")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($gui[1])
    $matrix = _GDIPlus_MatrixCreate()
    _GDIPlus_MatrixScale($matrix,0.5,0.5)
    ;_GDIPlus_MatrixTranslate($matrix,600,650)
    _GDIPlus_GraphicsSetTransform($hGraphic,$matrix)

    _WinAPI_RedrawWindow($gui[1], 0, 0, $RDW_UPDATENOW)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage,300,600)
    _WinAPI_RedrawWindow($gui[1],0, 0, $RDW_VALIDATE)

    Return $GUI_RUNDEFMSG
EndFunc
 
Les coordonnées (300,600) de _GDIPlus_GraphicsDrawImage ne peuvent être le X et le Y "en pixel" puisque ma
Gui n'a même pas ces dimensions.

Voici le script complet (avec images)
_codes.zip
(224.5 Kio) Téléchargé 45 fois
Le "cercle" est crée au même endroit que le label, pourtant, leurs coordonnées ne sont pas les même. Le cercle positionner
avec GDI a besoin de coordonnées deux fois plus grandes et j'avoue ne pas saisir...

J'ai également tenté de le laissé aux coordonnées (0,0) et de faire un matrix translate mais ça n'a pas fonctionné non plus...




EDIT : J'ai résolu mon problème...
_GDIPlus_MatrixScale($matrix,0.5,0.5)
ne fait pas seulement réduire mon graphique mais affecte également les coordonnées qui doivent être
2 fois plus grande.

Merci !