mit gdiplus einen Blätter effekt machen

  • Ich glaub das ist ziemlich kompliziert, aber meinst du vielleicht sowas in der Art nur mit Krümmung und sowas?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GDIPlus.au3>

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

    $hGUI = GUICreate("Umblättertest", 400, 400)
    GUISetState()

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

    _GDIPlus_Startup()

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

    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics(400, 400, $hGraphics)
    Global $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)
    _GDIPlus_GraphicsClear($hBuffer, 0xFFFFFFFF)
    _GDIPlus_GraphicsClear($hGraphics, 0xFFFFFFFF)

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

    Global $hPen = _GDIPlus_PenCreate(0xFF000000, 3)

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

    _GDIPlus_GraphicsFillEllipse($hGraphics, 350, 350, 50, 50)

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_PenDispose($hPen)
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    Switch $nMsg[3]
    Case 350 To 400
    Switch $nMsg[4]
    Case 350 To 400
    _Umblaettern()
    _GDIPlus_GraphicsClear($hGraphics, 0xFFFFFFFF)
    _GDIPlus_GraphicsFillEllipse($hGraphics, 350, 350, 50, 50)
    EndSwitch
    EndSwitch
    EndSwitch
    WEnd

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

    Func _Umblaettern()
    $iX = 400
    $iY = 400
    For $i = 0 To 100
    _GDIPlus_GraphicsClear($hBuffer, 0xFFFFFFFF)
    _GDIPlus_GraphicsDrawLine($hBuffer, 400, 0, $iX, $iY, $hPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 0, 400, $iX, $iY, $hPen)
    _GDIPlus_GraphicsFillEllipse($hBuffer, 350, 350, 50, 50)
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, 400, 400)
    $iX -= 4
    $iY -= 4
    Sleep(20)
    Next
    EndFunc ;==>_Umblaettern

    [/autoit]

    Einfach auf den Kreis klicken.

  • Das ist dann schon schwieriger. Man müsste im Prinzip das Bild krümmen, aber inwiefern das mit Autoit realisierbar ist weiß ich leider nicht.
    EDIT: Vielleicht mit BitmapLockBits() und BitmapUnLockBits()