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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

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

#1

Message 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.
Modifié en dernier par SagePourpre le lun. 11 janv. 2010 20:50, modifié 1 fois.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

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

#2

Message 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
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

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

#3

Message 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é 43 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 !
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Répondre