GDI + Hilfe

  • [autoit]

    #include <GuiConstants.au3>
    #include <GdiPlus.au3>;das include
    #include <Misc.au3>

    [/autoit][autoit][/autoit][autoit]

    OnAutoItExitRegister("_end") ; die Funktion _end am Ende des Scriptes ausführen

    [/autoit][autoit][/autoit][autoit]

    $x = 0; Poition von Bild auf X-Achse
    $y = 0; Poition von Bild auf Y-Achse

    [/autoit][autoit][/autoit][autoit]

    $Gui = GUICreate("Beispiel", 500, 500, 100, 100); GUI erstellen
    GUISetState(@SW_SHOW); Anzeigen

    [/autoit][autoit][/autoit][autoit]

    _GDIPlus_Startup() ;Gdi starten

    [/autoit][autoit][/autoit][autoit]

    $figur = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\tux.jpg"); Meine Bild reinladen
    $background = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\al.png")
    $Matrix = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\hd.jpg")

    [/autoit][autoit][/autoit][autoit]

    $height = _GDIPlus_ImageGetHeight($figur); Größe meines Bildes ermitteln (Höhe)
    $width = _GDIPlus_ImageGetWidth($figur); Größe meines Bildes ermitteln (Breite)
    $verhaelnis = $height / $width; Verhältnis ausrechen, damit kleiner

    [/autoit][autoit][/autoit][autoit]

    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui); Object um drauf zu malen
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(500, 500, $graphic) ; Bitmap-Objekt mit bezug auf unsere Grafik erstellen
    $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap) ; Grafik-Kontext holen.

    [/autoit][autoit][/autoit][autoit]

    $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphic) ;erstelle Bitmap von der Grafik
    $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap) ;erstelle Grafik Kontext von der Bitmap (dient für die Doppeltbufferung der Grafik, damit die Bewegungen flüssiger aussehen

    [/autoit][autoit][/autoit][autoit]

    _GDIPlus_GraphicsSetSmoothingMode($backbuffer, 2) ; da

    [/autoit][autoit][/autoit][autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE ; Event CLose
    Exit

    [/autoit][autoit][/autoit][autoit]

    EndSwitch

    [/autoit][autoit][/autoit][autoit]

    If _IsPressed(25) And $x >= 0 Then; Links pfeiltaste änder die koordinaten so, dass bild sich nach links beweg
    $x -= 7
    EndIf
    If _IsPressed(26) And $y >= 0 Then; Oben pfeiltaste änder die koordinaten so, dass bild sich nach oben bewegt!
    $y -= 7
    EndIf
    If _IsPressed(27) And $x <= 480 Then; Rechts pfeiltaste änder die koordinaten so, dass bild sich nach rechts bewegt!
    $x += 7
    EndIf
    If _IsPressed(28) And $y <= 480 Then; Runter pfeiltaste änder die koordinaten so, dass bild sich nach unten bewegt!
    $y += 7
    EndIf

    [/autoit][autoit][/autoit][autoit]

    _GDIPlus_GraphicsDrawImageRect($hbackbuffer, $background, 0, 0, 500, 500)
    _GDIPlus_GraphicsDrawImageRect($hbackbuffer, $figur, $x, $y, 20, 20 * $verhaelnis) ;die Figur wird an der neuen Position gezeichnet
    _GDIPlus_GraphicsDrawImageRect($graphic, $hBitmap, 0, 0, 500, 500)

    [/autoit][autoit][/autoit][autoit]

    ;($graphic = Unser Hintergrund also Wodrauf er neuzeichnen soll)
    ;($figur= Was er neuzeichnen soll also unser Bild!)
    ;($x= Die veränderte X Koordinate)
    ;($y= Die veränderte Y Koordinate)
    ;(20 = Die Größe(Weite!) )
    ;(20 *$verhaelnis = Die größe(Höhe))
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _end();die Exit funktion
    _GDIPlus_GraphicsDispose($graphic);Grafik Objekt freigeben
    _GDIPlus_ImageDispose($figur);Bild Objekt freigeben
    _GDIPlus_ImageDispose($background);Bild Objekt freigeben
    _GDIPlus_ImageDispose($Matrix);Bild Objekt freigeben
    _GDIPlus_Shutdown();Ressourcen freigeben
    EndFunc ;==>_end

    [/autoit]

    Hey Community,
    könntet Ihr mir villeicht helfen,
    ich Idee wie ich zu dem herumfahrenden Männchen bilder von links nach rechts, oben nach unten usw. laufen lassen kann, währen man noch mit dem männchen rumfahren kann.
    Es wäre cool, wenn die anderen Bilde auf gebufft sind, damit es nicht flackert, könnte mir evtl, jemand helfen?

    Vielen Dank schon im Vorraus!

    Liebe Grüße
    *scarface*

  • Sie können die Bilder einfach durch irgendwelche andere ersetzen das müsste kein Problem sein oder? :)
    Wenn doch, lade ich gerne die anderen Bilder noch hoch!

  • Probiere es mal so:

    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>
    #include <GdiPlus.au3>;das include
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    OnAutoItExitRegister("_end") ; die Funktion _end am Ende des Scriptes ausführen

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup() ;Gdi starten

    [/autoit] [autoit][/autoit] [autoit]

    $figur = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\tux.jpg"); Meine Bild reinladen
    $background = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\al.png")
    $Matrix = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\hd.jpg")

    [/autoit] [autoit][/autoit] [autoit]

    $height = _GDIPlus_ImageGetHeight($background); Größe meines Bildes ermitteln (Höhe)
    $width = _GDIPlus_ImageGetWidth($background); Größe meines Bildes ermitteln (Breite)
    $verhaelnis = $height / $width; Verhältnis ausrechen, damit kleiner

    [/autoit] [autoit][/autoit] [autoit]

    $fheight = _GDIPlus_ImageGetHeight($figur); Größe meines Bildes ermitteln (Höhe)
    $fwidth = _GDIPlus_ImageGetWidth($figur); Größe meines Bildes ermitteln (Breite)

    [/autoit] [autoit][/autoit] [autoit]

    $Gui = GUICreate("Beispiel", $width, $height); GUI erstellen
    GUISetState(@SW_SHOW); Anzeigen

    [/autoit] [autoit][/autoit] [autoit]

    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui); Object um drauf zu malen
    $hbitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphic) ;erstelle Bitmap von der Grafik
    $hbackbuffer = _GDIPlus_ImageGetGraphicsContext($hbitmap) ;erstelle Grafik Kontext von der Bitmap (dient für die Doppeltbufferung der Grafik, damit die Bewegungen flüssiger aussehen

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsSetSmoothingMode($hbackbuffer, 2) ; da

    [/autoit] [autoit][/autoit] [autoit]

    $x = $width / 2 - $fwidth / 2; Poition von Bild auf X-Achse
    $y = $height / 2 - $fheight / 2; Poition von Bild auf Y-Achse

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE ; Event CLose
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    If _IsPressed(25) And $x >= 3 Then; Links pfeiltaste änder die koordinaten so, dass bild sich nach links beweg
    $x -= 3
    EndIf
    If _IsPressed(26) And $y >= 3 Then; Oben pfeiltaste änder die koordinaten so, dass bild sich nach oben bewegt!
    $y -= 3
    EndIf
    If _IsPressed(27) And $x <= $width - $fwidth - 3 Then ;$width - $fwidth - 3 Then; Rechts pfeiltaste änder die koordinaten so, dass bild sich nach rechts bewegt!
    $x += 3
    EndIf
    If _IsPressed(28) And $y <= $height - $fheight - 3 Then; Runter pfeiltaste änder die koordinaten so, dass bild sich nach unten bewegt!
    $y += 3
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsDrawImageRect($hbackbuffer, $background, 0, 0, $width, $height)
    _GDIPlus_GraphicsDrawImageRect($hbackbuffer, $figur, $x, $y, $fwidth, $fheight) ;die Figur wird an der neuen Position gezeichnet
    _GDIPlus_GraphicsDrawImageRect($graphic, $hBitmap, 0, 0, $width, $height)

    [/autoit] [autoit][/autoit] [autoit]

    ;($graphic = Unser Hintergrund also Wodrauf er neuzeichnen soll)
    ;($figur= Was er neuzeichnen soll also unser Bild!)
    ;($x= Die veränderte X Koordinate)
    ;($y= Die veränderte Y Koordinate)
    ;(20 = Die Größe(Weite!) )
    ;(20 *$verhaelnis = Die größe(Höhe))
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _end();die Exit funktion
    _GDIPlus_GraphicsDispose($graphic);Grafik Objekt freigeben
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hbackbuffer)
    _GDIPlus_ImageDispose($figur);Bild Objekt freigeben
    _GDIPlus_ImageDispose($background);Bild Objekt freigeben
    _GDIPlus_ImageDispose($Matrix);Bild Objekt freigeben
    _GDIPlus_Shutdown();Ressourcen freigeben
    EndFunc ;==>_end

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Nein, warum ?

    MfG

    Ps: Weist du wie ich dort weiter komme?

    Zitat


    ...
    könntet Ihr mir villeicht helfen,
    ich Idee wie ich zu dem herumfahrenden Männchen bilder von links nach rechts, oben nach unten usw. laufen lassen kann, währen man noch mit dem männchen rumfahren kann.
    Es wäre cool, wenn die anderen Bilde auf gebufft sind, damit es nicht flackert, könnte mir evtl, jemand helfen?
    ...

    Weil dein Deutsch nach einer maschinellen Übersetzung klingt! ;)

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    Einmal editiert, zuletzt von UEZ (14. Oktober 2010 um 21:46)

  • Okay danke :)
    Ich glaube dann solltest du mir noch zu der AutoIt hilfe Deutschunterricht geben :)
    Was ist denn so falsch?

  • Naja jetzt nochmal zu meiner Frage:
    Also ich möchte das mit GDI+ so machen, dass ich zu dem Hintergrundbild und dem "Tux" männchen, welches man bewegen kann, andere Formen habe, die z.B. von oben nach unten fallen und das die ganze Zeit.
    Ich möchte jedoch trotzdem noch das männchen bewegen können.

    Mfg :)