Bild auf Knopfdruck drehen

  • Ich arbeite gerade an einem Brettspiel.
    Dafür soll es einen Button geben der Den Würfel wirft (und das Bild dreht).
    Allerdings verschwindet der würfel nur.

    Spoiler anzeigen
    [autoit]

    #include <GDIplus.au3>
    #include <GUIConstants.au3>
    #include <Windowsconstants.au3>
    #include <SliderConstants.au3>
    #include <EditConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    ;~ #NoTrayIcon

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

    _GDIPlus_Startup()

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

    Global $dice = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\dice.gif")

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

    Global $sizedice_x = _GDIPlus_ImageGetWidth($dice)
    Global $sizedice_y = _GDIPlus_ImageGetHeight($dice)

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

    $guiwidth = @DesktopWidth/2
    $guiheigth = @DesktopHeight/1.5
    Global $hWnd = GUICreate("Spiel zur Erlösung",$guiwidth,$guiheigth, -1, -1, Default)

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

    $rolldicebutton = GUICtrlCreateButton("Roll Dice",$guiwidth-120,$guiheigth - 100,100,50)
    $diceresultinput = GUICtrlCreateInput("",$guiwidth-120,$guiheigth - 40,100,20)

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

    GUISetOnEvent($GUI_EVENT_CLOSE,"_exit",$hWnd)
    GUICtrlSetOnEvent($rolldicebutton,"rolldice")

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

    GUISetState(@SW_SHOW,$hWnd)

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

    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)

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

    _GDIPlus_GraphicsDrawImage($hGraphics, $dice,$guiwidth/1.4,$guiheigth/1.2)

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

    Global $hdiceBitmap = _GDIPlus_BitmapCreateFromGraphics($sizedice_x, $sizedice_y, $hGraphics)
    Global $hdiceBackbuffer = _GDIPlus_ImageGetGraphicsContext($hdiceBitmap)

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

    Global $hdiceMatrix = _GDIPlus_MatrixCreate()
    _GDIPlus_MatrixTranslate($hdiceMatrix, $sizedice_x / 2, $sizedice_y / 2)

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

    While 1
    WEnd

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

    Func rolldice()
    GUICtrlSetData($diceresultinput,Random(1,6,1))
    $count = 1
    For $count = 1 to 12 Step 1
    _GDIPlus_GraphicsClear($hdiceBackbuffer, 0xFFFFFFFF)
    _GDIPlus_MatrixRotate($hdiceMatrix,10, 0)
    _GDIPlus_GraphicsSetTransform($hdiceBackbuffer, $hdiceMatrix)
    ;~ _GDIPlus_GraphicsSetTransform($hGraphics, $hdiceMatrix)
    ;~ _GDIPlus_GraphicsDrawImage($hdiceBackbuffer, $dice, $sizedice_x / 2,$sizedice_y / 2)
    _GDIPlus_GraphicsDrawImageRect($hdiceBitmap, $hdiceBackbuffer,$guiwidth/1.4,$guiheigth/1.2, $sizedice_x, $sizedice_y)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hdiceBitmap, $guiwidth/1.4,$guiheigth/1.2)
    ;~ _GDIPlus_GraphicsDrawImageRect($hGraphics, $hdiceBitmap,$guiwidth/1.4,$guiheigth/1.2, $sizedice_x, $sizedice_y)

    Next
    EndFunc

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

    Func _Exit()
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit]

    Für Hilfe wäre ich dankbar. :)

  • Ich weiß nicht, ob das das ist, was du suchst, aber schau mal in meine Signatur, und klick auf den Link, der "Würfeln" heißt.
    //Edit: Ich bin mir nicht sicher, aber ich glaube, dass man mit den Matrixen/Matrizen (sucht euch das Richtige raus :D ) aus der GDIPlus.au3 keine Bilder drehen kann.
    //Edit2: Tja, da lag ich wohl falsch. Ich sollte mich wohl mehr mit Matrizen auseinandersetzen :S

  • Spoiler anzeigen
    [autoit]


    #include <GDIplus.au3>
    #include <GUIConstants.au3>
    #include <Windowsconstants.au3>
    #include <SliderConstants.au3>
    #include <EditConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    ;~ #NoTrayIcon

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

    _GDIPlus_Startup()

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

    Global $dice = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\dice.gif")

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

    Global $sizedice_x = _GDIPlus_ImageGetWidth($dice)
    Global $sizedice_y = _GDIPlus_ImageGetHeight($dice)

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

    $guiwidth = @DesktopWidth/2
    $guiheigth = @DesktopHeight/1.5
    Global $hWnd = GUICreate("Spiel zur Erlösung",$guiwidth,$guiheigth, -1, -1, Default)

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

    $rolldicebutton = GUICtrlCreateButton("Roll Dice",$guiwidth-120,$guiheigth - 100,100,50)
    $diceresultinput = GUICtrlCreateInput("",$guiwidth-120,$guiheigth - 40,100,20)

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

    GUISetState()

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

    GUISetOnEvent($GUI_EVENT_CLOSE,"_exit",$hWnd)
    GUICtrlSetOnEvent($rolldicebutton,"rolldice")

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

    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    Global $hdiceBitmap = _GDIPlus_BitmapCreateFromGraphics($sizedice_x, $sizedice_y, $hGraphics)
    Global $hdiceBackbuffer = _GDIPlus_ImageGetGraphicsContext($hdiceBitmap)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $dice, $guiwidth/1.4,$guiheigth/1.2,$sizedice_x, $sizedice_y)

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

    Global $hdiceMatrix = _GDIPlus_MatrixCreate()
    _GDIPlus_MatrixTranslate($hdiceMatrix, $sizedice_x / 2, $sizedice_y / 2)

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

    _GDIPlus_GraphicsSetTransform($hdiceBackbuffer, $hdiceMatrix)
    _GDIPlus_GraphicsDrawImageRect($hdiceBackbuffer, $dice, -$sizedice_x * 0.5, -$sizedice_y*0.5,$sizedice_x, $sizedice_y)
    _GDIPlus_MatrixRotate($hdiceMatrix, 33, 0)

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

    While Sleep(100)
    WEnd

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

    Func rolldice()
    GUICtrlSetData($diceresultinput,Random(1,6,1))
    $count = 1
    ;~ For $count = 1 to 12 Step 1
    _GDIPlus_GraphicsClear($hdiceBackbuffer, 0xFFF0F0F0)
    _GDIPlus_GraphicsSetTransform($hdiceBackbuffer, $hdiceMatrix)
    _GDIPlus_GraphicsDrawImageRect($hdiceBackbuffer, $dice, -$sizedice_x * 0.5, -$sizedice_y*0.5,$sizedice_x, $sizedice_y)
    _GDIPlus_MatrixRotate($hdiceMatrix, 33, 0)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hdiceBitmap,$guiwidth/1.4,$guiheigth/1.2, $sizedice_x, $sizedice_y)

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

    ;~ Next
    EndFunc

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

    Func _Exit()
    _GDIPlus_MatrixDispose($hdiceMatrix)
    _GDIPlus_ImageDispose($dice)
    _GDIPlus_BitmapDispose($hdiceBitmap)
    _GDIPlus_GraphicsDispose($hdiceBackbuffer)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit]


    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • hier ein beispiel ..

    Spoiler anzeigen


    #include <GDIPlus.au3>


    $drehwinkel=90

    _GDIPlus_Startup()

    $hGui = GUICreate("Test Rotate", 800, 600)
    GUISetState()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)

    $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Test.bmp")
    $iWidth = _GDIPlus_ImageGetWidth($hImage) * 96 / _GDIPlus_ImageGetVerticalResolution($hImage)
    $iHeight = _GDIPlus_ImageGetHeight($hImage) * 96 / _GDIPlus_ImageGetHorizontalResolution($hImage)

    $hMatrix = _GDIPlus_MatrixCreate()
    _GDIPlus_MatrixTranslate($hMatrix, 400, 300)

    ;For $i = 1 To 360
    _GDIPlus_MatrixRotate($hMatrix, $drehwinkel, "False")
    _GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, -$iWidth / 2, -$iHeight / 2)
    ; Sleep(1)
    ;Next

    While GUIGetMsg() <> -3
    Sleep(10)
    WEnd

    _GDIPlus_MatrixDispose($hMatrix)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()

    must nur noch ein Bild umbenennen in "Test.bmp" und ins gleiche Verzeichnis legen.

    wenn du das Bild kontinuierlich drehen lassen willsch,

    must du "$drehwinkel=90" immer erhöhen .. oder verringern .. jeh nach dreh richtung .. und das script als funktion erneut aufrufen ..

    ich guck mal ob ich da noch was rum liegen hab ..