1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. designfenix

Beiträge von designfenix

  • GDI+ Parallax Effect

    • designfenix
    • 8. März 2022 um 18:13


    Ich freue mich sehr, dass sie inspiriert sind und Ideen wachsen lassen. (google translate) 🙌


    Zitat von UEZ

    Hier ein kleines Skript zum Anzeigen des Parallax Effektes. Original Idee stammt von Fernando Cohen und kann hier betrachtet werden: https://codepen.io/designfenix/pen/pYyOJE

    C
    ;Coded by UEZ build 2020-01-07
    ;Original idea and graphic concept by Fernando Cohen -> https://codepen.io/designfenix/pen/pYyOJE
    #pragma compile(Icon, "c:\Program Files (x86)\AutoIt3\Icons\au3.ico")
    #AutoIt3Wrapper_Run_Au3Stripper=y
    #Au3Stripper_Parameters=/so /pe /rm
    #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3"
    
    #include <GDIPlus.au3>
    #include <GuiConstantsEx.au3>
    #include <InetConstants.au3>
    #include <WindowsConstants.au3>
    
    
    _GDIPlus_Startup()
    Global $hGUI, $iFPS = 0, $iShowFPS = 0, $bExit
    Global Const $iW = 1200, $iH = 700, $iWh = $iW / 2, $iHh = $iH / 2, $sTitle = "GDI+ Parallax Effect v0.55"
    Global Const $fPi = ACos(-1), $fRad = $fPi / 180, $fDeg = 180 / $fPi
    AutoItSetOption("GUIOnEventMode", 1)
    
    ParallaxFX()
    
    AutoItSetOption("GUIOnEventMode", 0)
    _GDIPlus_Shutdown()
    
    
    Func ParallaxFX()
        ConsoleWrite("Downloading images if images don't exist locally...Please wait!" & @CRLF)
        Local Const $sImg1 = @ScriptDir & "\mountain.png", $sImg2 = @ScriptDir & "\island.png", $sImg3 = @ScriptDir & "\bird.png", $sImg4 = @ScriptDir & "\boat.png"
        If Not FileExists($sImg1) Then InetGet("http://www.design-fenix.com.ar/parallax/mountain.png", $sImg1, BitOR($INET_FORCERELOAD, $INET_BINARYTRANSFER))
        If Not FileExists($sImg2) Then InetGet("http://www.design-fenix.com.ar/parallax/island.png", $sImg2, BitOR($INET_FORCERELOAD, $INET_BINARYTRANSFER))
        If Not FileExists($sImg3) Then InetGet("http://www.design-fenix.com.ar/parallax/bird.png", $sImg3, BitOR($INET_FORCERELOAD, $INET_BINARYTRANSFER))
        If Not FileExists($sImg4) Then InetGet("http://www.design-fenix.com.ar/parallax/boat.png", $sImg4, BitOR($INET_FORCERELOAD, $INET_BINARYTRANSFER))
    
        $bExit = False
        $hGUI = GUICreate($sTitle, $iW, $iH) ;, 0, 0, $WS_POPUP)
        Local Const $iLabel = GUICtrlCreateLabel("", 0, 0, $iW, $iH)
        GUISetState(@SW_SHOW, $hGUI)
        GUISetCursor(9, 1)
    
        ;create canvas elements
        Local Const $hDC = _WinAPI_GetDC($hGUI)
        Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH)
        Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC)
        Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap)
        Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer)
        _GDIPlus_GraphicsSetSmoothingMode($hCanvas, $GDIP_SMOOTHINGMODE_HIGHQUALITY)
        _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas, $GDIP_PIXELOFFSETMODE_HIGHQUALITY)
        _GDIPlus_GraphicsSetTextRenderingHint($hCanvas, $GDIP_TEXTRENDERINGHINT_ANTIALIASGRIDFIT)
    
        Local Const $hBrush_Clr = _GDIPlus_BrushCreateSolid(0xFFF4F9FA), _
                    $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xF0808080), _
                    $hFormat_FPS = _GDIPlus_StringFormatCreate(), _
                    $hFamily_FPS = _GDIPlus_FontFamilyCreate("Arial"), _
                    $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8), _
                    $tLayout_FPS = _GDIPlus_RectFCreate(0, 0, 60, 16)
    
        $iFPS = 0
    
        Local $tObj = DllStructCreate("float x1;float y1;float x2;float y2;float x3;float y3;float x4;float y4;" & _
                                      "float dx1;float dy1;float dx2;float dy2;float dx3;float dy3;float dx4;float dy4;" & _
                                      "ptr bmp1;ptr bmp2;ptr bmp3;ptr bmp4")
    
        $tObj.bmp1 = _GDIPlus_ImageLoadFromFile($sImg1)
        $tObj.bmp2 = _GDIPlus_ImageLoadFromFile($sImg2)
        $tObj.bmp3 = _GDIPlus_ImageLoadFromFile($sImg3)
        $tObj.bmp4 = _GDIPlus_ImageLoadFromFile($sImg4)
    
        $tObj.x1 = ($iW - _GDIPlus_ImageGetWidth($tObj.bmp1)) / 2
        $tObj.y1 = 60
        $tObj.x2 = ($iW - _GDIPlus_ImageGetWidth($tObj.bmp2)) / 2
        $tObj.y2 = 250
        $tObj.x3 = 210
        $tObj.y3 = 250
        $tObj.x4 = $iW - _GDIPlus_ImageGetWidth($tObj.bmp4) - 300
        $tObj.y4 = 430
    
        Local $hFamily = _GDIPlus_FontFamilyCreate("Impact"), $hFont = _GDIPlus_FontCreate($hFamily, 120), $hFormat = _GDIPlus_StringFormatCreate(), _
              $tLayout = _GDIPlus_RectFCreate(), $hBrush = _GDIPlus_BrushCreateSolid(0xD8FFFFFF), _
              $hFamily_s = _GDIPlus_FontFamilyCreate("Palatino Linotype"), $hFont_s = _GDIPlus_FontCreate($hFamily_s, 24), _
              $tLayout_s = _GDIPlus_RectFCreate($iW + 1, $iH - 44, $iW * 2, 50), $hBrush_s = _GDIPlus_BrushCreateSolid(0x2884898A)
    
        Local $aDim = _GDIPlus_GraphicsMeasureString($hCanvas, "Parallax", $hFont, $tLayout, $hFormat)
        Local $sScrollerTxt = "Parallax Effect ported to AutoIt by UEZ. Original idea and graphic concept by Fernando Cohen."
        Local $aDim2 = _GDIPlus_GraphicsMeasureString($hCanvas, $sScrollerTxt, $hFont_s, $tLayout_s, $hFormat)
    
        $tLayout.x = ($iW - $aDim[0].width) / 2
        $tLayout.y = 190
        Local $aMPos, $aDir[4][2] = [[16, 128], [32, 64], [64, 32], [128, 16]], $iDir = 0, _
              $iPosX = GUIGetCursorInfo($hGUI)[0], $iPosY = GUIGetCursorInfo($hGUI)[1]
    
        GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About")
        AdlibRegister("CalcFPS", 1000)
    
        Local $fVx, $fVy, $fAcc = 0.925, $fVmax = 32
    
        Do
            DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 0, _
                                   "float", $iW, "float", $iH) ;erase canvas background
    
            $aMPos = GUIGetCursorInfo($hGUI)
            If ($iPosX <> $aMPos[0] Or $iPosY <> $aMPos[1]) And $aMPos[4] = $iLabel Then
                $fVx = $aMPos[0] - $iPosX
                $fVy = $aMPos[1] - $iPosY
                If $fVx < 0 Then
                    $fVx = $fVx < -$fVmax ? -$fVmax : $fVx
                Else
                    $fVx = $fVx > $fVmax ? $fVmax : $fVx
                EndIf
                If $fVy < 0 Then
                    $fVy = $fVy < -$fVmax ? -$fVmax : $fVy
                Else
                    $fVy = $fVy > $fVmax ? $fVmax : $fVy
                EndIf
                $tObj.dx1 = -$fVx / $aDir[0][$iDir]
                $tObj.dy1 = -$fVy / $aDir[0][$iDir]
                $tObj.dx2 = -$fVx / $aDir[1][$iDir]
                $tObj.dy2 = -$fVy / $aDir[1][$iDir]
                $tObj.dx3 = -$fVx / $aDir[2][$iDir]
                $tObj.dy3 = -$fVy / $aDir[2][$iDir]
                $tObj.dx4 = -$fVx / $aDir[3][$iDir]
                $tObj.dy4 = -$fVy / $aDir[3][$iDir]
    
                $tObj.x1 += $tObj.dx1
                $tObj.y1 += $tObj.dy1
                $tObj.x2 += $tObj.dx2
                $tObj.y2 += $tObj.dy2
                $tObj.x3 += $tObj.dx3
                $tObj.y3 += $tObj.dy3
                $tObj.x4 += $tObj.dx4
                $tObj.y4 += $tObj.dy4
    
                $iPosX = $aMPos[0]
                $iPosY = $aMPos[1]
            Else
                $tObj.dx1 *= $fAcc
                $tObj.dy1 *= $fAcc
                $tObj.dx2 *= $fAcc
                $tObj.dy2 *= $fAcc
                $tObj.dx3 *= $fAcc
                $tObj.dy3 *= $fAcc
                $tObj.dx4 *= $fAcc
                $tObj.dy4 *= $fAcc
                $tObj.x1 += $tObj.dx1
                $tObj.y1 += $tObj.dy1
                $tObj.x2 += $tObj.dx2
                $tObj.y2 += $tObj.dy2
                $tObj.x3 += $tObj.dx3
                $tObj.y3 += $tObj.dy3
                $tObj.x4 += $tObj.dx4
                $tObj.y4 += $tObj.dy4
            EndIf
    
            _GDIPlus_GraphicsDrawImage($hCanvas, $tObj.bmp1, $tObj.x1, $tObj.y1)
            _GDIPlus_GraphicsDrawStringEx($hCanvas, "Parallax", $hFont, $tLayout, $hFormat, $hBrush)
            _GDIPlus_GraphicsDrawImage($hCanvas, $tObj.bmp2, $tObj.x2, $tObj.y2)
            _GDIPlus_GraphicsDrawImage($hCanvas, $tObj.bmp3, $tObj.x3, $tObj.y3)
            _GDIPlus_GraphicsDrawImage($hCanvas, $tObj.bmp4, $tObj.x4, $tObj.y4)
    
            _GDIPlus_GraphicsDrawStringEx($hCanvas, $sScrollerTxt, $hFont_s, $tLayout_s, $hFormat, $hBrush_s)
            $tLayout_s.x -= 1.0
            If $tLayout_s.x < -$aDim2[0].width Then $tLayout_s.x = $iW + 10
    
            _GDIPlus_GraphicsDrawStringEx($hCanvas, "FPS: " & $iShowFPS, $hFont_FPS, $tLayout_FPS, $hFormat_FPS, $hBrush_FPS) ;draw background message text
            _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCCOPY) ;blit drawn bitmap to GUI
    
            $iFPS += 1
            If $bExit Then ExitLoop
        Until Not Sleep(10)
    
        AdlibUnRegister("CalcFPS")
        ;release resources
        _GDIPlus_ImageDispose($tObj.bmp1)
        _GDIPlus_ImageDispose($tObj.bmp2)
        _GDIPlus_ImageDispose($tObj.bmp3)
        _GDIPlus_ImageDispose($tObj.bmp4)
        _GDIPlus_StringFormatDispose($hFormat)
        _GDIPlus_BrushDispose($hBrush)
        _GDIPlus_FontDispose($hFont)
        _GDIPlus_FontFamilyDispose($hFamily)
        _GDIPlus_BrushDispose($hBrush_s)
        _GDIPlus_FontDispose($hFont_s)
        _GDIPlus_FontFamilyDispose($hFamily_s)
    
        _GDIPlus_FontFamilyDispose($hFamily_FPS)
        _GDIPlus_StringFormatDispose($hFormat_FPS)
        _GDIPlus_BrushDispose($hBrush_Clr)
        _GDIPlus_BrushDispose($hBrush_FPS)
        _GDIPlus_GraphicsDispose($hCanvas)
        _WinAPI_SelectObject($hDC_backbuffer, $DC_obj)
        _WinAPI_DeleteDC($hDC_backbuffer)
        _WinAPI_DeleteObject($hHBitmap)
        _WinAPI_ReleaseDC($hGUI, $hDC)
        GUIDelete($hGUI)
    EndFunc   ;==>ParallaxFX
    
    
    Func _Exit_About()
        $bExit = True
    EndFunc   ;==>_Exit_About
    
    Func CalcFPS() ;display FPS
        $iShowFPS = $iFPS
        $iFPS = 0
    EndFunc   ;==>CalcFPS
    Alles anzeigen

    Die nötigen Bilder werden heruntergeladen und lokal in ScriptDir gespeichert.

    Vorschau:

    Parallax.png

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™