GDI+ Buffer einbauen

  • [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", 179, 163, 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")
    $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
    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui); Object um drauf zu malen
    $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
    _GDIPlus_GraphicsSetSmoothingMode($backbuffer, 2) ; da

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

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

    EndSwitch

    Select
    Case _IsPressed(25); Links pfeiltaste änder die koordinaten so, dass bild sich nach links bewegt!
    $x -= 1
    Case _IsPressed(26); Oben pfeiltaste änder die koordinaten so, dass bild sich nach oben bewegt!
    $y -= 1
    Case _IsPressed(27); Rechts pfeiltaste änder die koordinaten so, dass bild sich nach rechts bewegt!
    $x += 1
    Case _IsPressed(28); Runter pfeiltaste änder die koordinaten so, dass bild sich nach unten bewegt!
    $y += 1
    EndSelect

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

    _GDIPlus_GraphicsDrawImageRect($graphic,$background,0,0,179, 163)
    _GDIPlus_GraphicsDrawImageRect($graphic, $figur, $x, $y, 20,20 * $verhaelnis) ;die Figur wird an der neuen Position gezeichnet
    ;($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_GraphicsDispose($backbuffer)
    ; _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_ImageDispose($background);Bild Objekt freigeben
    _GDIPlus_Shutdown();Ressourcen freigeben
    EndFunc ;==>_end

    [/autoit]

    Hallo Community!
    Ich wollte einen Buffer hier in dieses Script einbauen, jedoch habe ich es nicht geschafft!
    Ich würde mich sehre freuen, wenn ihr mir helfen könntet.
    Sofern Ihr euch damit auskennt könntet ihr mir villeicht auch sagen, wie man es macht das das kleine mit den Pfeiltasten verschiebbare Bild, nicht aus dem Fenster laufen kann! :)

    Liebe Grüße
    *scareface*

  • Bitte Bilder dazugeben,
    Ich bin gerade am nachgucken, aber damit dus verstehst, ein backbuffer ist nichts anderes wie eine scheibe auf der man zeichent, diese aber nicht sieht, wenn das fertig gezeichnet ist, dann tauscht man die scheibe mit der scheibe darüber also die man gesehen hat und setzt diese nach unten.
    Die untere ist dann der backbuffer.


    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [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", 179, 163, 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")
    $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
    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui); Object um drauf zu malen
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(179, 163, $graphic) ; Bitmap-Objekt mit bezug auf unsere Grafik erstellen
    $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap) ; Grafik-Kontext holen.
    $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
    _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 -= 1
    EndIf
    If _IsPressed(26) And $y >= 0 Then; Oben pfeiltaste änder die koordinaten so, dass bild sich nach oben bewegt!
    $y -= 1
    EndIf
    If _IsPressed(27) And $x <= 159 Then; Rechts pfeiltaste änder die koordinaten so, dass bild sich nach rechts bewegt!
    $x += 1
    EndIf
    If _IsPressed(28) And $y <= 143 Then; Runter pfeiltaste änder die koordinaten so, dass bild sich nach unten bewegt!
    $y += 1
    EndIf

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

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

    [/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_GraphicsDispose($backbuffer)
    ; _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_ImageDispose($background);Bild Objekt freigeben
    _GDIPlus_Shutdown();Ressourcen freigeben
    EndFunc ;==>_end

    [/autoit]

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

    Einmal editiert, zuletzt von BadBunny (6. Oktober 2010 um 21:49)

  • Sry, aber soweit bin ich noch nicht, das ich wüste wie ich das jetzt in Source Code umwandeln könnte.
    Also die Bilde kannst du ja durch jegliche andere eryätzen also müsste das kein Problem sein ohne bilder oder?
    Wenn nicht bitte nochmal melden, aber danke schonmal für die Antwort

    Liebe Grüße!

  • So müsste es rein theoretisch gehen:

    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]

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

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

    $Gui = GUICreate("Beispiel", 179, 163, 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")
    $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
    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui); Object um drauf zu malen
    $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
    _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]

    Select
    Case _IsPressed(25); Links pfeiltaste änder die koordinaten so, dass bild sich nach links bewegt!
    $x -= 1
    Case _IsPressed(26); Oben pfeiltaste änder die koordinaten so, dass bild sich nach oben bewegt!
    $y -= 1
    Case _IsPressed(27); Rechts pfeiltaste änder die koordinaten so, dass bild sich nach rechts bewegt!
    $x += 1
    Case _IsPressed(28); Runter pfeiltaste änder die koordinaten so, dass bild sich nach unten bewegt!
    $y += 1
    EndSelect
    _GDIPlus_GraphicsDrawImageRect($backbuffer,$background,0,0,179,163)
    _GDIPlus_GraphicsDrawImageRect($backbuffer, $figur, $x, $y, 20,20 * $verhaelnis) ;die Figur wird an der neuen Position gezeichnet
    ;($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))
    _GDIPlus_GraphicsDrawImageRect($graphic, $bitmap, 0, 0, 179,163)
    WEnd

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

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

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Nein, wenn ich das so mache, wird nix angezeigt...
    Das Problem hatte ich auch schon, also ich habe die neuste version von autoit liegt es villeicht daran ?

  • Bei mir gehts auch, sogar mit einschränkung das es nicht aus dem bild kann.
    Wenn da steht @scriptdir sollten sich die Bilder auch in dem Ordner befinden, wo das script liegt das du startest.

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • BadBunny, ich habe es auch so aussprobiert, ie sie es gemacht haben, aber es funktioniert nicht...soll ich doch die Bilder reinstellenß
    Oder hängt es doch mit meiner Version zusammen?
    Ich habe auch noch ein anderes Problem, aber das funktioniert auch bei anderen nicht

  • Ich hab eine Idee.
    Leg die Bilder, das script auf den desktop, überprüfe die Bildändungen (*.jpg,*.png) und schreib dann müsste es funktionieren, wenn die endung, und der hauptname richtig sind.

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Oh nein ich habs, die Skripte von euch hatte ich nciht in den ordner gepackt,
    entschuldigt!

    Ok, dann wäre das auch geklärt! :)
    Haben sie vll, Skype oder Icq, über welche ich sie kontaktieren könnte?
    Ich denke , dass das nicht meine einzigen Probleme sein werden, und wie ich gesehen habe,
    kennen sie sich beide sehr gut mit dem Programmieren in AUtoIt und GDI+ aus .
    Liebe Grüße