Page 1 sur 1

[R] Pb de clonage GDI+

Posté : mer. 01 avr. 2015 19:11
par sozary
Bonjour!!
J'ai suivi le tutoriel sur GDI+ du forum, mais je n'ai pas réussi à déplacer un élément à l'écran avec _GDIPlus_BitmapCloneArea!!
Voici mon code!

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
_GDIPlus_Startup()
Global $position[2] = [0, 0]
HotKeySet("{DOWN}", "_Down")
$pPerso = @ScriptDir & "\cercle.png"
$hImage = _GDIPlus_BitmapCreateFromFile($pPerso)
Global $Form1 = GUICreate("Form1", 615, 437, 426, 378)
GUISetState(@SW_SHOW)
$graphHdl = _GDIPlus_GraphicsCreateFromHWND($Form1)
_GDIPlus_GraphicsClear($graphHdl, 0xFF9EFD38)
$hBitmap = _GDIPlus_GraphicsDrawImageRect($graphHdl, $hImage, $position[0], $position[1], 15, 15)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
            _GDIPlus_GraphicsDispose($graphHdl)
            _GDIPlus_BitmapDispose($hBitmap)
            _GDIPlus_BitmapDispose($hClone)
            _GDIPlus_Shutdown()

    EndSwitch
WEnd

Func _Down()
    $position[1] += 15
    $hClone = _GDIPlus_BitmapCloneArea($hBitmap, $position[0], $position[1], 15, 15)
EndFunc   ;==>_Down
 

Re: [..] Pb de clonage GDI+

Posté : mer. 01 avr. 2015 19:48
par A2Energie
Bonjour,

Je suis pas sure totalement mais à confirmer.
tu copie (non pas clown) ton image mais ne la recolle pas.

Essaye avec ce code :

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
_GDIPlus_Startup()
Global $position[2] = [100, 100]
HotKeySet("{DOWN}", "_Down")
$pPerso = @ScriptDir & "\cercle.png"
$hImage = _GDIPlus_BitmapCreateFromFile($pPerso)
Global $Form1 = GUICreate("Form1", 615, 437, 426, 378)
GUISetState(@SW_SHOW)
$graphHdl = _GDIPlus_GraphicsCreateFromHWND($Form1)
_GDIPlus_GraphicsClear($graphHdl, 0xFF9EFD38)
$hBitmap = _GDIPlus_GraphicsDrawImageRect($graphHdl, $hImage, $position[0], $position[1], 15, 15)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
            _GDIPlus_GraphicsDispose($graphHdl)
            _GDIPlus_BitmapDispose($hBitmap)
            _GDIPlus_BitmapDispose($hClone)
            _GDIPlus_Shutdown()

    EndSwitch
WEnd

Func _Down()
    $hClone = _GDIPlus_BitmapCloneArea($hImage, $position[0], $position[1], 15, 15)
    $position[1] += 50
    _GDIPlus_GraphicsDrawImageRect($graphHdl, $hClone, $position[0], $position[1], 15, 15)
EndFunc   ;==>_Down
 
Je pense que dans un premier temps ca va t'avancer, ensuite, je connais pas vraiment cet UDF, donc difficil de t'aider d'avantage.

Re: [..] Pb de clonage GDI+

Posté : mer. 01 avr. 2015 20:20
par mikell
Jette un coup d'oeil

Re: [..] Pb de clonage GDI+

Posté : mer. 01 avr. 2015 20:24
par sozary
Merci de ta réponse! Néanmoins il y a un soucis, l'image ne se duplique pas entièrement :( (une seule est partie est visible)

Re: [..] Pb de clonage GDI+

Posté : mer. 01 avr. 2015 20:31
par mikell
_GDIPlus_BitmapCloneArea (comme son nom l'indique) sert à créer une image à partir d'une partie d'une autre image, rien à voir avec le fait de déplacer une image

Re: [..] Pb de clonage GDI+

Posté : mer. 01 avr. 2015 20:43
par sozary
Ah? Merci bien!
Juste une autre question pendant que je te tiens mikell!

Ce labyrinthe n'a pas utilisé cette technique, mais laquelle il a utilisé svp? Car avec ton programme j'ai pas trop compris comment après redimensionner l'image :(!

Re: [..] Pb de clonage GDI+

Posté : mer. 01 avr. 2015 22:16
par mikell
Je ne sais pas et je n'ai pas l'intention d'analyser tout son code, surtout en semaine alors que je bosse demain :mrgreen:

Donc je vais au plus simple : voilà mon pingouin en 64x64 (divisé par 2)
► Afficher le texte

Re: [..] Pb de clonage GDI+

Posté : mer. 01 avr. 2015 22:38
par sozary
D'accord! Bah ton programme marche de toute façon ^^!

Merci!!

Re: [R] Pb de clonage GDI+

Posté : jeu. 02 avr. 2015 08:29
par A2Energie
Bonjour,

J'ai l'impression que le Script de Mikell crée une Gui (conteneur) : $gui = GUICreate(
Puis crée l'image : $hImage = _GDIPlus_ImageLoadFromFile(
Puis attache l'image au conteneur : SetBitMap($gui, $hImage, 255)
Pour enfin déplacer le conteneur : WinMove($gui, "", Default, $p)

Car dans ton script Sozary, tu ne peux pas déplacer l'image car $hBitmap = _GDIPlus_GraphicsDrawImageRect(
Return (true) et pas d'id ou de Handle, donc ensuite impossible d'identifier l'image pour la déplacer.

Re: [R] Pb de clonage GDI+

Posté : jeu. 02 avr. 2015 15:33
par mikell
Bon voilà avec le code de départ c'était tout simple en fait
► Afficher le texte
Mais je reste persuadé (pour ce que je soupçonne que tu veux faire) que faire une petite gui transparente pour l'image et la déplacer reste la meilleure solution
Dans ce code, chaque coup de fonction Down oblige à "nettoyer" $hGraphics et à tout y réécrire, et si tu as plusieurs images de fond ça peut être lourd

Re: [R] Pb de clonage GDI+

Posté : ven. 03 avr. 2015 06:55
par sozary
Oui, c'est la méthode que j'ai utilisé! Pour l'instant j'ai bien compris comment j'ai procédé, donc je préfère laisser comme tel :)!
Merci de votre aide!