GDI+ Graphic über einen Hintergrund bewegen

  • Hi,

    ich komme gerade an einem Problem mit GDI nicht weiter. Und zwar möchte ich ein Png-Bild über einen bereits gezeichneten Hintergrund bewegen. Also wie wenn man zwei Ebenen nehmen würde. Die erste ist das Png-Bild und in der zweiten das Hintergrundbild. Die Bewegung sollte möglichst ohne flackern und ruckeln sein. Ich habe hier bereits das Forum durchschaut und bin auf folgendes gestoßen: Link

    Jedoch bekomme ich es nicht richtig hin. Den Code dazu will ich erst garnicht posten ;)

    Danke schonmal!

  • Meinst du sowas?

    Spoiler anzeigen
    [autoit]


    ;Coded by UEZ 2009.12.11
    #include <GDIplus.au3>
    Opt("GUIOnEventMode", 1)

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

    _GDIPlus_Startup()
    Global $load_background = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\Background.png")
    Global $load_foreground = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\Smiley.png")
    Global $width = _GDIPlus_ImageGetWidth($load_background)
    Global $height = _GDIPlus_ImageGetHeight($load_background)
    Global $dx = _GDIPlus_ImageGetWidth($load_foreground)
    Global $dy = _GDIPlus_ImageGetHeight($load_foreground)
    Global Const $pi_div_180 = 4 * ATan(1) / 180
    Global $radius = 60
    Global $i, $x = $width / 2 - $dx / 2, $y = $height / 2 - $dy / 2

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

    Global $hwnd = GUICreate("GDI+: Example by UEZ", $width, $height, -1, -1, Default)
    GUISetOnEvent(-3, "_Exit")
    GUISetState()

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

    Global $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    Global $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics)
    Global $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    ;~ _GDIPlus_GraphicsSetSmoothingMode($backbuffer, 4)

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

    $i = 0
    While Sleep(30)
    _GDIPlus_GraphicsDrawImage($backbuffer, $load_background, 0, 0) ;draw background
    _GDIPlus_GraphicsDrawImage($backbuffer, $load_foreground, $x + Cos($i * $pi_div_180) * $radius, $y + Sin($i * $pi_div_180) * $radius) ;draw foreground
    $i += 2
    _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height)
    WEnd

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

    Func _Exit()
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit]

    Im Anhang unten sind die Bilder!

    Gruß,
    UEZ