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. UEZ

Beiträge von UEZ

  • Bild in eine GUI einfügen

    • UEZ
    • 29. Dezember 2015 um 02:25

    Probiere es mal mit

    AutoIt
    GUICtrlCreatePic(@ScriptDir & "\Nawi-Logo.jpg", -1, -1)

    Das "\" hatte gefehlt.

  • GDI+ Simple Firework mit Sound Effekten

    • UEZ
    • 27. Dezember 2015 um 01:06

    Hier ein kleines Skript für den Silvester Abend.

    Download: GDI+ Simple Firework build 2016-01-08 (inkl. Sound FX Files!)


    Viel Spaß beim Ausprobieren. ;)


    Geschwindigkeit: ~17 FPS auf Intel Core i5 4300U @ 2.6 GHz bei einer Auflösung von 1600x900

    Source Code

    Spoiler anzeigen
    AutoIt: GDI+ Simple Firework build 2016-01-08.au3
    ;coded by UEZ build 2016-01-08
    ;~ #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #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 <WindowsConstants.au3>
    #include "BassConstants.au3"
    #include "Bass.au3"
    
    
    _GDIPlus_Startup()
    Global $hGUI, $iFPS = 0, $iFrames = 0, $iShowFPS = 0, $fTimer, $bExit, $aAudio
    Global Const $iW = @DesktopWidth, $iH = @DesktopHeight, $iWh = $iW / 2, $iHh = $iH / 2, $sTitle = "GDI+ Simple Firework by UEZ"
    Global Const $fPi = ACos(-1), $fRad = $fPi / 180, $iMaxParticles = 51, $iFireworks = 10, $iParticleSize = 4
    Global $iElements = 9, $aCoords[$iFireworks][$iElements + $iMaxParticles * 4 - 3] ;don't touch these values
    AutoItSetOption("GUIOnEventMode", 1)
    
    
    GDIPlus_SimpleFirework()
    
    
    AutoItSetOption("GUIOnEventMode", 0)
    _GDIPlus_Shutdown()
    
    
    
    
    Func GDIPlus_SimpleFirework()
    	$bExit = False
    	$hGUI = GUICreate($sTitle & 0, $iW, $iH, 0, 0, $WS_POPUP)
    	GUISetState(@SW_SHOW, $hGUI)
    	WinSetTrans($hGUI, "", 0xF8)
    	GUISetCursor(16, 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)
    	Local Const $hBrush = _GDIPlus_BrushCreateSolid(0xFFE0E0E0), _
    			$hBrush_Clr = _GDIPlus_BrushCreateSolid(0xA0000000), _
    			$hBrush_Txt = _GDIPlus_BrushCreateSolid(0x10202020), $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xA0505050), _
    			$hFormat = _GDIPlus_StringFormatCreate(), $hFormat_FPS = _GDIPlus_StringFormatCreate(), _
    			$hFamily = _GDIPlus_FontFamilyCreate("Impact"), $hFamily_FPS = _GDIPlus_FontFamilyCreate("Arial"), _
    			$hFont = _GDIPlus_FontCreate($hFamily, $iH / 4.5), $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8), _
    			$tLayout = _GDIPlus_RectFCreate(0, 0, $iW, $iH), $tLayout_FPS = _GDIPlus_RectFCreate(0, 0, 150, 32)
    	_GDIPlus_StringFormatSetAlign($hFormat, 1)
    	_GDIPlus_StringFormatSetLineAlign($hFormat, 1)
    
    
    	Local $iX, $iY, $j = -2^32 + 1, $bAudio = True
    
    
    	;init sound
    	_BASS_STARTUP()
    	_BASS_Init(0, -1, 44100, 0, "")
    	If @error Then $bAudio = False
    
    
    	Local $aAudio[$iFireworks][2], $hAudio_Whoa, $hAudio_BgNoise
    	For $iY = 0 To $iFireworks - 1	;generated firework particles
    		GenCoordinates($iY, $aCoords, 1.5, 3.5, 1, 5.5)
    		If $bAudio Then
    			$aAudio[$iY][0] = _BASS_StreamCreateFile(False, @ScriptDir & "\" & Random(1, 7, 1) & ".mp3", 0, 0, 0)
    			$aAudio[$iY][1] = 0
    		EndIf
    	Next
    	$hAudio_Whoa = _BASS_StreamCreateFile(False, @ScriptDir & "\ApplauseWoah.mp3", 0, 0, 0)
    	$hAudio_BgNoise = _BASS_StreamCreateFile(False, @ScriptDir & "\BgNoise.mp3", 0, 0, 0)
    	_BASS_ChannelPlay($hAudio_BgNoise, True)
    
    
    	$iFPS = 0
    	GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About")
    	AdlibRegister("CalcFPS", 1000)
    	Local $iAlpha, $iCounterFX = 0, $iCounterParticles = 0, $b
    	$fTimer = TimerInit()
    
    
    	Do
    		DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 0, _
    				"float", $iW, "float", $iH) ;erase canvas background
    		_GDIPlus_GraphicsDrawStringEx($hCanvas, "Happy new year 2016", $hFont, $tLayout, $hFormat, $hBrush_Txt) ;draw background message text
    		For $iY = 0 To $iFireworks - 1 ;calculate and draw firework particles
    			If $aCoords[$iY][1] > $aCoords[$iY][4] Then ;draw rocket only until explosion
    				$aCoords[$iY][0] += $aCoords[$iY][2] ;x vector
    				$aCoords[$iY][1] -= Abs($aCoords[$iY][3] * 10) ;y vector should be in upper direction only
    				_GDIPlus_BrushSetSolidColor($hBrush, 0x60909090)
    				DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush, "float", $aCoords[$iY][0], "float", $aCoords[$iY][1], "float", 2, "float", 2)
    				$iCounterParticles += 1
    				For $iX = $iElements To UBound($aCoords, 2) - 5 Step 4
    					$aCoords[$iY][$iX] = $aCoords[$iY][0] ;copy x position
    					$aCoords[$iY][$iX + 1] = $aCoords[$iY][1] ;copy y position
    				Next
    			Else
    				For $iX = $iElements To UBound($aCoords, 2) - 5 Step 4
    					$aCoords[$iY][$iX] += $aCoords[$iY][$iX + 2] ;x coordinate
    					$aCoords[$iY][$iX + 1] += $aCoords[$iY][$iX + 3] + $aCoords[$iY][8] ;y coordinate
    					$aCoords[$iY][$iX + 2] *= 0.98 ;neg. accelaration of x vector
    					$aCoords[$iY][$iX + 3] *= 0.98 ;neg. accelaration of y vector
    					$iAlpha = $aCoords[$iY][6] > 0xFF ? 0xFF : $aCoords[$iY][6]
    					Switch $aCoords[$iY][7] ;choose color mode
    						Case 0
    							$b = True
    							Switch Mod($j, 2)
    								Case 0
    									_GDIPlus_BrushSetSolidColor($hBrush, Int($iAlpha) * 0x1000000 + 0x10000 * Random(0xD0, 0xFF, 1) + 0x100 * Random(0xD0, 0xFF, 1) + Random(0xD0, 0xFF, 1))
    								Case Else
    									_GDIPlus_BrushSetSolidColor($hBrush, Int($iAlpha) * 0x1000000 + $aCoords[$iY][5])
    							EndSwitch
    						Case Else
    							$b = False
    							_GDIPlus_BrushSetSolidColor($hBrush, Int($iAlpha) * 0x1000000 + $aCoords[$iY][5])
    					EndSwitch
    					;draw only visible particles
    					If BitAND($aCoords[$iY][$iX] > -1, $aCoords[$iY][$iX] < $iW, $aCoords[$iY][$iX + 1] > -1, $aCoords[$iY][$iX + 1] < $iH) Then
    						DllCall($__g_hGDIPDll, "int", "GdipFillEllipse", "handle", $hCanvas, "handle", $hBrush, _
    											   "float", $aCoords[$iY][$iX], "float", $aCoords[$iY][$iX + 1], _
    											   "float", $iParticleSize, "float", $iParticleSize) ;draw firework particles
    						$iCounterParticles += 1
    					EndIf
    				Next
    				If $b Then $j += 1
    				$aCoords[$iY][6] *= 0.933 ;decrease alpha channel
    				$aCoords[$iY][8] *= 1.075 ;gravity accelaration (y axis) -> earth's gravitational force simulation
    				If Not $aAudio[$iY][1] And $bAudio Then ;play audio fx
    					_BASS_ChannelPlay($aAudio[$iY][0], False)
    					$aAudio[$iY][1] = 1
    					$iCounterFX += 1
    				EndIf
    				If $aCoords[$iY][6] < 0x08 Then ;reset firework elements
    					$aAudio[$iY][1] = 0
    					GenCoordinates($iY, $aCoords)
    				EndIf
    			EndIf
    		Next
    		If $iCounterFX > 2 Then
    			_BASS_ChannelPlay($hAudio_Whoa, False)
    		EndIf
    		_GDIPlus_GraphicsDrawStringEx($hCanvas, "FPS: " & $iShowFPS & @CRLF & "Particles: " & $iCounterParticles, $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
    		$iCounterFX = 0
    		$iCounterParticles = 0
    		$iFPS += 1
    		$iFrames += 1
    		If $bExit Then ExitLoop
    	Until Not Sleep(10)
    
    
    	AdlibUnRegister("CalcFPS")
    	;release resources
    	_GDIPlus_FontDispose($hFont)
    	_GDIPlus_FontDispose($hFont_FPS)
    	_GDIPlus_FontFamilyDispose($hFamily)
    	_GDIPlus_FontFamilyDispose($hFamily_FPS)
    	_GDIPlus_StringFormatDispose($hFormat)
    	_GDIPlus_StringFormatDispose($hFormat_FPS)
    	_GDIPlus_BrushDispose($hBrush)
    	_GDIPlus_BrushDispose($hBrush_Clr)
    	_GDIPlus_BrushDispose($hBrush_Txt)
    	_GDIPlus_BrushDispose($hBrush_FPS)
    	_GDIPlus_GraphicsDispose($hCanvas)
    	_WinAPI_SelectObject($hDC, $DC_obj)
    	_WinAPI_DeleteObject($hHBitmap)
    	_WinAPI_ReleaseDC($hGUI, $hDC)
    	GUIDelete($hGUI)
    	If $bAudio Then
    		For $iY = 0 To $iFireworks - 1
    			_BASS_ChannelStop($aAudio[$iY][0])
    		Next
    		_BASS_ChannelStop($hAudio_Whoa)
    		_BASS_ChannelStop($hAudio_BgNoise)
    		_BASS_Free()
    	EndIf
    EndFunc   ;==>GDIPlus_SimpleFirework
    
    
    Func GenCoordinates($iY, ByRef $aCoords, $fVXmin = 2.5, $fVXmax = 15.5, $fVYmin = 1.5, $fVYmax = 5.5)
    	Local $aColors[7] = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF7514, 0xFFFFFF, 0x40E0D0]
    	$aCoords[$iY][0] = $iWh	;x coordinate (x coordinate of starting point)
    	$aCoords[$iY][1] = $iH	;y coordinate (y coordinate of starting point)
    	$aCoords[$iY][2] = Random($fVXmin, $fVXmax) * (Random(0, 1, 1) = 0 ? -1 : 1) 	;x vector (direction of rocket)
    	$aCoords[$iY][3] = Random($fVYmin, $fVYmax) * (Random(0, 1, 1) = 0 ? -1 : 1)	;y vector (direction of rocket)
    	$aCoords[$iY][4] = Random($iH * 0.15, $iH * 0.35) ;area of detonation
    ;~ 	$aCoords[$iY][5] = 0x10000 * Random(0x40, 0xE0, 1) + 0x100 * Random(0x40, 0xE0, 1) + Random(0x40, 0xE0, 1) ;random color
    	$aCoords[$iY][5] = $aColors[Random(0, 6, 1)] ;random color
    	$aCoords[$iY][6] = 0x250 ;alpha channel value
    	$aCoords[$iY][7] = Random(0, 1, 1) ;value for color mode
    	$aCoords[$iY][8] = 0.15 ;gravity accelaration (y axis) initial value
    
    
    	Local $iX, $fSpeed, $fRadius, $iFX = Random(1, 50, 1), $e = Random(5, 25), $h = 0, $g = 360 / ($iMaxParticles - 1), _
    		  $j = 360 / 10, $jj = $j, $k = Random(0.5, 1.5), $kk = Random(1, 3.5), $l = 0
    	For $iX = $iElements To UBound($aCoords, 2) - 5 Step +4
    		Switch $iFX
    			Case 1 To 3
    				$fSpeed = Cos($g * $iFX * $e * $iX) * $e
    				$fRadius = $fSpeed / 2
    			Case 4 To 6
    				$fSpeed = Sin($iX / 7.85) * $e ;particle speed (explosion strength)
    				$fRadius = $fSpeed / 2
    			Case 7 To 9
    				$fSpeed = Tan($iX / 2) + $e ;particle speed (explosion strength)
    				$fRadius = $fSpeed / 2
    			Case 10 To 12
    				$fSpeed = Cos($iX / 2.5) + $e ;particle speed (explosion strength)
    				$fRadius = $fSpeed / 2
    			Case 13 To 15	;create circular effect
    				$fSpeed = Random($e, $e + 0.333333) ;particle speed (explosion strength)
    				$fRadius = $fSpeed / 2
    			Case 16 To 18
    				$fSpeed = $e
    				$fRadius = $k
    				$h = $jj
    				$jj += $j
    				If $jj > 360 Then
    					$jj = $j - $l
    					$k += $kk
    					$l += Random(1, 15)
    				EndIf
    			Case Else
    				$fSpeed = Random(5, 25) ;particle speed (explosion strength)
    				$fRadius = $fSpeed / 2
    		EndSwitch
    		$aCoords[$iY][$iX + 2] = ($fSpeed + Cos($h * $fRad) * $fRadius) - $fSpeed 	;x vector particle speed
    		$aCoords[$iY][$iX + 3] = ($fSpeed + Sin($h * $fRad) * $fRadius) - $fSpeed	;y vector particle speed
    		$h += $g ;next angle
    	Next
    EndFunc   ;==>GenCoordinates
    
    
    Func _Exit_About()
    	$bExit = True
    EndFunc   ;==>_Exit_About
    
    
    Func CalcFPS() ;display FPS
    	$iShowFPS = $iFPS & " / Ø " & Round($iFrames / TimerDiff($fTimer) * 1000, 4)
    	$iFPS = 0
    EndFunc   ;==>CalcFPS
    Alles anzeigen
  • GDI+ HeatMap V2

    • UEZ
    • 22. Dezember 2015 um 12:00

    Sehr elegant gelöst. :klatschen:

  • GDI+ Wave

    • UEZ
    • 22. Dezember 2015 um 11:45

    :klatschen::thumbup:


    Also doch ein Integer Problem. :D

  • GDI+ Wave

    • UEZ
    • 22. Dezember 2015 um 10:40

    Yep, genau das meine ich. Theoretisch sollte das aber nicht vorkommen, weil ein Gitter aufgezogen wird und jeweils die Nachbarpunkte benutzt werden.


    Sowas hier:

    AutoIt
    #AutoIt3Wrapper_Version=b
    #AutoIt3Wrapper_Run_Au3Stripper=y
    #Au3Stripper_Parameters=/so
    
    
    #include <GuiConstantsEx.au3>
    #include <GDIPlus.au3>
    
    
    #Region GDIPlusEx
    Global Const $_cGDIPEX_ISBMP = 0x41455047
    Global Const $_cGDIPEX_ISBUF = 0x42455047
    Global Const $_sGDIPEX_IIDBMP = "{EB22CE37-EE56-458B-AD13-3FC836E8CE49}"
    Global Const $_sGDIPEX_IIDBUF = "{1CB99E61-15BA-4B1F-8C7E-25D00AE60F2D}"
    Global Const $_tagGDIPEX_BUFFER = "Draw int(int;int;uint); Gfx handle(); pBits ptr(); Width int(); Height int(); Stride int();"
    Global Const $_tagGDIPEX_BITMAP = "Bmp handle(); Gfx handle(); Scan0 ptr(); Width int(); Height int(); Stride int(); Draw int(struct*;int;int); DrawRect int(struct*;int;int;uint;uint);"
    Global $_aGDIPEX_ASMSTRUCT[1]
    OnAutoItExitRegister("__GDIPlusEx_OnExit")
    Global Const $_hGDIPEX_GDIPDLL = _GDIPlus_Startup()
    Global Const $_hGDIPEX_MOD_GDI32 = _WinAPI_GetModuleHandle("gdi32.dll")
    Global Const $_hGDIPEX_MOD_GDIPLUS = _WinAPI_GetModuleHandle("gdiplus.dll")
    Global Const $_hGDIPEX_MOD_KERNEL32 = _WinAPI_GetModuleHandle("kernel32.dll")
    Global Const $_hGDIPEX_MOD_USER32 = _WinAPI_GetModuleHandle("User32.dll")
    Global Const $_pGDIPEX_LIB_SELOBJ = _WinAPI_GetProcAddress($_hGDIPEX_MOD_GDI32, "SelectObject")
    Global Const $_pGDIPEX_LIB_DELOBJ = _WinAPI_GetProcAddress($_hGDIPEX_MOD_GDI32, "DeleteObject")
    Global Const $_pGDIPEX_LIB_DELDC = _WinAPI_GetProcAddress($_hGDIPEX_MOD_GDI32, "DeleteDC")
    Global Const $_pGDIPEX_LIB_RELDC = _WinAPI_GetProcAddress($_hGDIPEX_MOD_USER32, "ReleaseDC")
    Global Const $_pGDIPEX_LIB_BITBLT = _WinAPI_GetProcAddress($_hGDIPEX_MOD_GDI32, "BitBlt")
    Global Const $_pGDIPEX_LIB_GLOBALFREE = _WinAPI_GetProcAddress($_hGDIPEX_MOD_KERNEL32, "GlobalFree")
    Global Const $_pGDIPEX_LIB_GFXDEL = _WinAPI_GetProcAddress($_hGDIPEX_MOD_GDIPLUS, "GdipDeleteGraphics")
    Global Const $_pGDIPEX_LIB_BMPDEL = _WinAPI_GetProcAddress($_hGDIPEX_MOD_GDIPLUS, "GdipDisposeImage")
    Global Const $_pGDIPEX_ASM_OBJ_QUERYIF = __GDIPlusEx_ASMCreate("0x538B4424088B5C2410890383400401B8000000005BC20C00", "0x49890883410801B800000000C3")
    Global Const $_pGDIPEX_ASM_OBJ_ADDREF = __GDIPlusEx_ASMCreate("0x8B442404834004018B4004C20400", "0x834108018B4108C3")
    Global Const $_pGDIPEX_ASM_OBJ_RELBUF = __GDIPlusEx_ASMCreate("0x538B5C2408836B0401837B040075448B43388B531C52FFD08B433C8B53288B4B305152FFD08B43408B532052FFD08B43448B532852FFD08B433C8B532C8B4B245152FFD08B433453FFD0B8000000005BC204008B43045BC20400", "0x534889CB836B0801837B080075504883EC20488B4360488B4B28FFD0488B4368488B4B40488B5350FFD0488B4370488B4B30FFD0488B4378488B4B40FFD0488B8380000000488B4B48488B5338FFD0488B43584889D9FFD04883C4205BC38B43085BC3")
    Global Const $_pGDIPEX_ASM_OBJ_RELBMP = __GDIPlusEx_ASMCreate("0x538B5C2408836B0401837B0400752A8B432C8B532052FFD08B43308B532452FFD08B43288B531C52FFD08B432853FFD0B8000000005BC204008B43045BC20400", "0x534889CB836B0801837B080075314883EC20488B4348488B4B30FFD0488B4350488B4B38FFD0488B4340488B4B28FFD0488B43404889D9FFD04883C4205BC38B43085BC3")
    Global Const $_pGDIPEX_ASM_OBJ_BUFDRAW = __GDIPlusEx_ASMCreate("0x5356578B5C24108B7424148B7C2418B8FFFFFFFF817B0847504542752E8B4C241C5183EC08C7042400000000C7442404000000008B5328528B5310528B530C5257568B5324528B434CFFD05F5E5BC21000", "0x534889CB4989D24D89C348C7C0FFFFFFFF81790C47504542754B4883EC484C894C244048C74424380000000048C744243000000000488B43404889442428488B431448894424204D31C9448B4B104D89D84C89D2488B4B38488B8388000000FFD04883C4485BC3")
    Global Const $_pGDIPEX_ASM_OBJ_BUFGFX = __GDIPlusEx_ASMCreate("0x8B5424048B421CC20400", "0x488B4128C3")
    Global Const $_pGDIPEX_ASM_OBJ_BUFBITS = __GDIPlusEx_ASMCreate("0x8B5424048B4218C20400", "0x488B4120C3")
    Global Const $_pGDIPEX_ASM_OBJ_BUFWIDTH = __GDIPlusEx_ASMCreate("0x8B5424048B420CC20400", "0x8B4110C3")
    Global Const $_pGDIPEX_ASM_OBJ_BUFHEIGHT = __GDIPlusEx_ASMCreate("0x8B5424048B4210C20400", "0x8B4114C3")
    Global Const $_pGDIPEX_ASM_OBJ_BUFSTRIDE = __GDIPlusEx_ASMCreate("0x8B5424048B4214C20400", "0x8B4118C3")
    Global Const $_pGDIPEX_ASM_OBJ_BMPBMP = __GDIPlusEx_ASMCreate("0x8B5424048B4224C20400", "0x488B4138C3")
    Global Const $_pGDIPEX_ASM_OBJ_BMPGFX = __GDIPlusEx_ASMCreate("0x8B5424048B4220C20400", "0x488B4130C3")
    Global Const $_pGDIPEX_ASM_OBJ_BMPSCAN0 = __GDIPlusEx_ASMCreate("0x8B5424048B4218C20400", "0x488B4120C3")
    Global Const $_pGDIPEX_ASM_OBJ_BMPWIDTH = __GDIPlusEx_ASMCreate("0x8B5424048B420CC20400", "0x8B4110C3")
    Global Const $_pGDIPEX_ASM_OBJ_BMPHEIGHT = __GDIPlusEx_ASMCreate("0x8B5424048B4210C20400", "0x8B4114C3")
    Global Const $_pGDIPEX_ASM_OBJ_BMPSTRIDE = __GDIPlusEx_ASMCreate("0x8B5424048B4214C20400", "0x8B4118C3")
    Global Const $_pGDIPEX_ASM_BMPDRAW = __GDIPlusEx_ASMCreate("0x5756538B7424108B7C2414817F0847504542740E817F08475045417405E98E010000F30F7E4E0CF30F7E442418660FFEC8660FEFFF660F6FF0F30F7E6F0C660FEACD660FEEC7660FFAC8660F6FD0660FFAD6B801000000660F6EF8660F70FFE0660F66F9660FD7C783F8000F853801000083EC20660FD60C24660F7EC1660F73D804660F7EC38B47148944240C0FAFC38D04888B571801C289542408660F7ED1660F73DA04660F7ED38B4614894424140FAFC38D04888B561801C289542410B800000047660F6EF8660F70FF00B801000000F30F2AF0660FEFED8B5C24048B7C24088B44240C014424088B7424108B442414014424108B0C248A46033C000F8483000000660F6E063CFF7477660F6E0F660F60C5660F60CDF20F70C093F20F70C993660F60C5660F60CD660FFEC7660FFECF0F5CC70F5CCFF30F10D6F30F5CD0F30F59CAF30F10E0F30F58E1F30F53DC660F70D1000F59CA660F70D000660F70DB000F59C20F58C10F59C3F30F10C40F58C7660FFAC7660F6BC0F20F70C039660F67C0660F7E0783C60483C70483E9010F8F63FFFFFF83EB010F8F3FFFFFFF83C420B800000000EB0CB8FEFFFFFFEB05B8FFFFFFFF5B5E5FC21000", "0x575653415441554883EC20F30F7F3424F30F7F7C24104889CE4889D7817F0C47504542740E817F0C475045417405E99D010000F30F7E4E1066410F6EC166410F6ED0660F73F804F30F10C2660FFEC8660FEFFF660F6FF0F30F7E6F10660FEACD660FEEC7660FFAC8660F6FD0660FFAD6B801000000660F6EF8660F70FFE0660F66F9660FD7C783F8000F853801000066410F7EC8660F73D90466410F7EC94831C0660F7EC1660F73D804660F7EC38B47184989C30FAFC3678D0488488B7F204801C74989FA660F7ED1660F73DA04660F7ED38B46184989C50FAFC3678D0488488B76204801C64989F4B800000047660F6EF8660F70FF00B801000000F30F2AF0660FEFED4489CB4C89D74D01DA4C89E64D01EC4489C18A46033C000F8483000000660F6E063CFF7477660F6E0F660F60C5660F60CDF20F70C093F20F70C993660F60C5660F60CD660FFEC7660FFECF0F5CC70F5CCFF30F10D6F30F5CD0F30F59CAF30F10E0F30F58E1F30F53DC660F70D1000F59CA660F70D000660F70DB000F59C20F58C10F59C3F30F10C40F58C7660FFAC7660F6BC0F20F70C039660F67C0660F7E074883C6044883C70483E9010F8F61FFFFFF83EB010F8F49FFFFFF48C7C000000000EB1048C7C0FEFFFFFFEB0748C7C0FFFFFFFFF30F6F7C2410F30F6F34244883C420415D415C5B5E5FC3")
    Global Const $_pGDIPEX_ASM_BMPDRAWRECT = __GDIPlusEx_ASMCreate("0x575653558B7424148B7C2418817F0847504542740E817F08475045417405E9DA010000F30F6F44241CF30F7E560CF30F7E5F0C0F5BC00F5BD20F5BDB0F12C80F28F00F28EA0F5EE90F57FF0F58C80F5DCB0F5FC70F5CC80FC2F906660FD7C7A90F0000000F858C0100000F28D00F5CC60F58C8F30F5BC0660F5BC9F30F5BD283EC20660FD60424660FD64C2408660F7ED1660F73DA04660F7ED38B4714894424140FAFC38D04888B571889D501C2895424108B4424140FAF471001C58B46148944241C8B761889742418B800000047660F6EF8660F70FF00B801000000F30F2AF08B0C24F30F2AC1F30F10C8F30F59CDF30F2CD1C1E20289548D00F30F58C683C1013B4C24087CE0660F70EDE18B5C24048B7C24108B44241401442410F30F2AC3F30F59C5F30F2CC08B7424180FAF44241C01C68B0C248B548D008A4416033C000F8488000000660F6E04163CFF747B660F6E0F660FEFD2660F60C2660F60CAF20F70C093F20F70C993660F60C2660F60CA660FFEC7660FFECF0F5CC70F5CCFF30F10D6F30F5CD0F30F59CAF30F10D0F30F58D1F30F53E2660F70D9000F59CB660F70D8000F59C3660F70E4000F58C10F59C4F30F10C20F58C7660FFAC7660F6BC0F20F70C039660F67C0660F7E0783C70483C1013B4C24080F8C58FFFFFF83C3013B5C240C0F8C25FFFFFF83C420B800000000EB0CB8FEFFFFFFEB05B8FFFFFFFF5D5B5E5FC21800", "0x660F6E4C2428660F6E442430660F62C85756535541544155415641574883EC30F30F7F3424F30F7F7C2410F3440F7F4424204889D74889CE817F0C47504542740E817F0C475045417405E9FA01000066410F6EC066410F6ED1660F73FA04660FEBC2660F73F908660FEBC1F30F7E5610F30F7E5F100F5BC00F5BD20F5BDB0F12C80F28F00F28EA0F5EE90F57FF0F58C80F5DCB0F5FC70F5CC80FC2F906660FD7C7A90F0000000F85940100000F28D00F5CC60F58C8F30F5BC0660F5BC9F30F5BD266490F7EC04D89C149C1E92066490F7ECA4D89D349C1EB20660F7ED1660F73DA04660F7ED34831C08B47184989C50FAFC3678D04884C8B67204C89E54901C44C89E80FAF47144801C58B46184989C74C8B7620B800000047660F6EF8660F70FF00B801000000F30F2AF04831C94489C1F30F2AC1F30F10C8F30F59CDF30F2CD1C1E20289548D00F30F58C683C1014439D17CE14831D2660F70EDE14489CB4C89E74D01ECF30F2AC3F30F59C5F3480F2CC04C89F6410FAFC74801C64489C18B548D008A4416033C000F848C000000660F6E04163CFF747F660F6E0F660FEFD2660F60C2660F60CAF20F70C093F20F70C993660F60C2660F60CA660FFEC7660FFECF0F5CC70F5CCFF30F10D6F30F5CD0F30F59CAF3440F10C0F3440F58C1F3410F53E0660F70D900660F70D0000F59CB0F59C2660F70E4000F58C10F59C4F3410F10C00F58C7660FFAC7660F6BC0F20F70C039660F67C0660F7E074883C70483C1014439D10F8C54FFFFFF83C3014439DB0F8C28FFFFFF48C7C000000000EB1048C7C0FEFFFFFFEB0748C7C0FFFFFFFFF3440F6F442420F30F6F7C2410F30F6F34244883C430415F415E415D415C5D5B5E5FC3")
    Global Const $_pGDIPEX_ASM_BMPCLONE = __GDIPlusEx_ASMCreate("0x5756538B7C24108B7424148B7614F30F7E4E0CF30F7E442418660FFEC8660FEFFF660F6FF0F30F7E6F0C660FEACD660FEEC7660FFAC8660F6FD0660FFAD6B801000000660F6EF8660F70FFE0660F66F9660FD7C783F8000F858F00000083EC20660FD60C24660F7EC1660F73D804660F7EC38B47148944240C0FAFC38D04888B571801C289542408660F7ED1660F73DA04660F7ED38B4614894424140FAFC38D04888B561801C2895424108B5C24048B7C24088B44240C014424088B7424108B442414014424108B0C24F30F6F06F30F7F0783C61083C71083E9047FED83EB017FCD83C420B800000000EB05B8FFFFFFFF5B5E5FC21000", "0x575653415441554889CF4889D6488B7628F30F7E4E1066410F6EC166410F6ED0660F73F804F30F10C2660FFEC8660FEFED660F6FE0F30F7E5F10660FEACB660FEEC5660FFAC8660F6FD0660FFAD4B801000000660F6EE8660F70EDE0660F66E9660FD7C583F8000F858F00000066410F7EC8660F73D90466410F7EC94831C0660F7EC1660F73D804660F7EC38B47184989C30FAFC3678D0488488B7F204801C74989FA660F7ED1660F73DA04660F7ED38B46184989C50FAFC3678D0488488B76204801C64989F44489CB4C89D74D01DA4C89E64D01EC4489C1F30F6F06F30F7F074883C6104883C71083E9047FEB83EB017FD748C7C000000000EB0748C7C0FFFFFFFF415D415C5B5E5FC3")
    Global Const $_pGDIPEX_ASM_BMPTRANS = __GDIPlusEx_ASMCreate("0x578B7C2408660F6E7C240C660F70FF00B800000047660F6EF0660F70F600B8FFFFFF00660F6EE8660F70ED008B4F100FAF4F148B7F18660F6F07660F6FC8660FDBC5660F72D118660FFECE0F5CCE0F59CF0F58CE660FFACE660F72F118660FEBC1660F7F0783C71083E9107FC95FC20800", "0x660F70E900B800000047660F6EE0660F70E400B8FFFFFF00660F6ED8660F70DB008B41140FAF4118488B4920660F6F01660F6FC8660FDBC3660F72D118660FFECC0F5CCC0F59CD0F58CC660FFACC660F72F118660FEBC1660F7F014883C11083E8107FC8C3")
    Global Const $_pGDIPEX_ASM_BMPCLR = __GDIPlusEx_ASMCreate("0x8B542404660F6E442408660F70C0008B4A100FAF4A148B5218660F7F0283C21083E9107FF4C20800", "0x660F6EC2660F70C0008B51140FAF5118488B4920660F7F014883C11083EA107FF3C3")
    Global Const $_pGDIPEX_ASM_WARPMXPREP = __GDIPlusEx_ASMCreate("0x8B5424048B4C2408B801000000660F6EF8F30F2AF8660F70FF00F30F2A710C660F70F600F30F2A6910660F70ED00837C24100074060F5CF70F5CEF660F7EB250010000660F7EAA540100008B4C240C0F10010F1049100F28E00F28D80F5DE10F5FD9660F73D808660F73D9080F5DE00F5FD80F5DE10F5FD9F30F5BE4660F5BDB660FFADC660FD6A240010000660FD69A480100000F5BE4F30F7E010F5CC4660F7E7A20660FD64224660F7E7A50660FD64254F30F7E41080F5CC40F57C90F5CC80F59CE660F7E7A68660FD6426C660FD68A80000000660F7EBA98000000660FD6829C000000F30F7E41100F5CC40F57C90F5CC80F59CD660F7EBAB0000000660FD682B4000000660F7EBAE0000000660FD682E4000000660FD68AEC000000F30F7E41180F5CC40F57C90F5CC80F28D10F59CE0F59D5660F7EBAF8000000660FD682FC000000660FD68A10010000660F7EBA28010000660FD6822C010000660FD69234010000660F7EB288000000660F7EAAF4000000660F7EB218010000660F7EAA3C010000C21000", "0x4883EC20F30F7F3424F30F7F7C2410B801000000660F6EF8F30F2AF8660F70FF00F30F2A7210660F70F600F30F2A6A14660F70ED004983F90074060F5CF70F5CEF660F7EB150010000660F7EA954010000410F1000410F1048100F28E00F28D80F5DE10F5FD9660F73D808660F73D9080F5DE00F5FD80F5DE10F5FD9F30F5BE4660F5BDB660FFADC660FD6A140010000660FD699480100000F5BE4F3410F7E000F5CC4660F7E7920660FD64124660F7E7950660FD64154F3410F7E40080F5CC40F57C90F5CC80F59CE660F7E7968660FD6416C660FD68980000000660F7EB998000000660FD6819C000000F3410F7E40100F5CC40F57C90F5CC80F59CD660F7EB9B0000000660FD681B4000000660F7EB9E0000000660FD681E4000000660FD689EC000000F3410F7E40180F5CC40F57C90F5CC80F28D10F59CE0F59D5660F7EB9F8000000660FD681FC000000660FD68910010000660F7EB928010000660FD6812C010000660FD69134010000660F7EB188000000660F7EA9F4000000660F7EB118010000660F7EA93C010000F30F6F7C2410F30F6F34244883C420C3")
    Global Const $_pGDIPEX_ASM_WARPMXSLVE = __GDIPlusEx_ASMCreate("0x575653558B6C2414B800000080660F6EF883C52031C90F57C00FB6D989D889C26BD20900CA660F6E4C95000F28D70F55D10F28CA0FC2C806660FD7D1F7C20F0000007406F30F10C289C383C00183F8077ECC89DA6BD20900CA837C9500000F841D01000038CB74330FB6F989DE6BFF096BF60931C08D1406660F6E4495008D1C07660F6E4C9D00660F7E4C9500660F7E449D0083C00183F8087EDA0FB6D16BD20A8B44950083F8000F84D3000000660F6EC00FB6F16BF60988CD0FB6D501F2660F6E4C9500F30F5EC8660F7E4C950080C50180FD087EE388CD80C50180FD077F3F0FB6FD6BFF0989FA00CA660F6E4495000FB6C189FA89F301C201C3660F6E4C9500660F6E549D00F30F59D0F30F5CCA660F7E4C950083C00183F8087ED6EBB980C10180F9070F8EEAFEFFFF8B7C2414B90700000089CA6BD20983C208660F6E449500660F7E048F89CB83C30183FB077F2689CA6BD20901DA660F6E449500660F6E0C9F660F6E148FF30F59C8F30F5CD1660F7E148FEBD283E9017DB831C0EB05B8FFFFFFFF5D5B5E5FC20400", "0x5756534889CF488D7120B800000080660F6EE84831C90F57C04889CB4889D84889C2486BD2094801CA660F6E0C960F28D50F55D10F28CA0FC2C806660FD7D1F7C20F0000007407F30F10C24889C34883C0014883F8077EC74889DA486BD2094801CA833C96000F84350100004839CB74374989C84989D94D6BC0094D6BC9094831C0498D1401660F6E0496498D1C00660F6E0C9E660F7E0C96660F7E049E4883C0014883F8087EDA4889CA486BD20A8B049683F8000F84E6000000660F6EC04989CA4D6BD2094989C94C89CA4C01D2660F6E0C96F30F5EC8660F7E0C964983C1014983F9087EE24989C84983C0014983F8077F444D89C14D6BC9094C89CA4801CA660F6E04964889C84C89CA4C89D34801C24801C3660F6E0C96660F6E149EF30F59D0F30F5CCA660F7E0C964883C0014883F8087ED3EBB24883C1014883F9070F8ED0FEFFFF48C7C1070000004889CA486BD2094883C208660F6E0496660F7E048F4889CB4883C3014883FB077F284889CA486BD2094801DA660F6E0496660F6E0C9F660F6E148FF30F59C8F30F5CD1660F7E148FEBCE4883E9017DB031C0EB05B8FFFFFFFF5B5E5FC3")
    Global Const $_pGDIPEX_ASM_WARPVAL = __GDIPlusEx_ASMCreate("0x57568B7C240C8B742410B907000000660F6E048E660F70C00089CAC1E2040F29041783E9017DE8B801000000F30F2AC0660F70C0000F298780000000B803000000F30F2AC0660F73F804B802000000F30F2AC0660F70C0D2660F73F8040F298790000000660F6E8650010000660F6E8E54010000660F70C000660F70C9000F2987A00000000F298FB00000008B44241489874C010000C1E802F30F2AC0660F70C0000F2987C0000000B800000047660F6EC0660F70C000660F7F8730010000F30F7E8648010000660FD687400100008B4424188987480100005E5FC21000", "0x49C7C20700000066420F6E0492660F70C0004D89D349C1E304420F2904194983EA017DE3B801000000F30F2AC0660F70C0000F298180000000B803000000F30F2AC0660F73F804B802000000F30F2AC0660F70C0D2660F73F8040F298190000000660F6E8250010000660F6E8A54010000660F70C000660F70C9000F2981A00000000F2989B00000004489814C01000041C1E802F3410F2AC0660F70C0000F2981C0000000B800000047660F6EC0660F70C000660F7F8130010000F30F7E8248010000660FD6814001000044898948010000C3")
    Global Const $_pGDIPEX_ASM_WARP = __GDIPlusEx_ASMCreate("0x575653558B6C24148BBD500100008BB5540100008B8D4001000083E904660F6EF9660F70FF000F5BFF0F58BD900000000F2875100F286D400F59F70F59EF0F5875000F586D300F597D600F58BD800000008B9D44010000660F6EE3660F70E4000F5BE40F5CA58000000083EB010F2845700F288D800000000F59C40F58C70F5EC80F285D200F2855500F59DC0F59D40F58DE0F58D50F59D90F59D10F2885A00000000F288DB00000000FC2C3020FC2CA020F56C10F57C90FC2CB050F56C10F57C90FC2CA050F56C10F50C083F80F0F8495000000F30F5BD2F30F5BDB0F5BD20F5BDB0F5995C00000000F58DAF30F5BDB660F72F302660FEFC0A9010000007509660F7EDA660F6E0416660F73DB04A902000000750D660F7EDA660F6E0C16660F62C1660F73DB04A904000000750C660F7EDA660F6E0C160F16C1660F73DB04A9080000007512660F7EDA660F6E0C16660F73F90C660FEBC189DA0FAF95480100008D148AF30F7F041783FB000F8FF1FEFFFF83F9000F8F9FFEFFFF5D5B5E5FC20400", "0x57564883EC20F30F7F3424F30F7F7C2410488BB950010000488BB158010000448B81400100004183E80466410F6EF8660F70FF000F5BFF0F58B9900000000F2871100F2869400F59F70F59EF0F58310F5869300F5979600F58B980000000448B894401000066410F6EE1660F70E4000F5BE40F5CA1800000004183E9010F2841700F2889800000000F59C40F58C70F5EC80F2859200F2851500F59DC0F59D40F58DE0F58D50F59D90F59D10F2881A00000000F2889B00000000FC2C3020FC2CA020F56C10F57C90FC2CB050F56C10F57C90FC2CA050F56C10F50C083F80F0F849B000000F30F5BD2F30F5BDB0F5BD20F5BDB0F5991C00000000F58DAF30F5BDB660F72F302660FEFC04831D2A9010000007509660F7EDA660F6E0416660F73DB04A902000000750D660F7EDA660F6E0C16660F62C1660F73DB04A904000000750C660F7EDA660F6E0C160F16C1660F73DB04A9080000007512660F7EDA660F6E0C16660F73F90C660FEBC14489CA0FAF914801000067428D1482F30F7F04174183F9000F8FE9FEFFFF4183F8000F8F93FEFFFFF30F6F7C2410F30F6F34244883C4205E5FC3")
    Global Const $_pGDIPEX_ASM_WARPIP = __GDIPlusEx_ASMCreate("0x575653558B6C241483EC048BBD500100008BB5540100008B8D40010000890C24832C2404660F6E3C24660F70FF000F5BFF0F58BD900000000F2875100F286D400F59F70F59EF0F5875000F586D300F597D600F58BD800000000F29BDD00000000F29B5E00000000F29ADF00000008B9D4401000083EB01F30F2AFB660F70FF000F2845700F288D800000000F59C70F5885D00000000F5EC80F2875200F286D500F59F70F59EF0F58B5E00000000F58ADF00000000F59F10F59E90F2885A00000000F288DB00000000FC2C6020FC2CD020F56C10F57C90F57D20FC2CE050FC2D5050F56C10F56C20F50C083F80F0F8434010000F30F5BFEF30F5BC50F5BFF0F5BC00F5CF70F5CE80F5985C00000000F58F8F30F5BFF660F72F7020F29AD200100000F29B5100100000F29BD000100000F288D30010000660FEFC0B903000000660F73F804A9080000000F85B90000008B948D00010000F30F7E3C1603954C010000F30F7E3416660FEFD2660F60FA660F60F2660F6FEF660F6FE6660F60FA660F60F2660F68EA660F68E2660FFEF9660FFEF1660FFEE9660FFEE10F5CF90F5CF10F5CE90F5CE1660F6E9C8D100100000F289580000000660F70DB000F5CD30F59FA0F59F20F59EB0F59E30F58FD0F58F4660F6E9C8D200100000F289580000000660F70DB000F5CD30F59FA0F59F30F58FE0F58F9660FFAF9660FEFD2660F6BFA660F67FAF30F10C7D1E083E9010F8D2CFFFFFF89DA0FAF95480100008B0C248D148AF30F7F041783FB000F8F44FEFFFF833C24000F8FE6FDFFFF83C4045D5B5E5FC20400", "0x57564881ECA0000000F30F7F3424F30F7F7C2410F3440F7F442420F3440F7F4C2430F3440F7F542440F3440F7F5C2450F3440F7F642460F3440F7F6C2470F3440F7FB42480000000F3440F7FBC2490000000488BB950010000488BB158010000440F28A180000000448B81400100004831D24183E80466450F6EF866450F70FF00450F5BFF440F58B990000000440F287110440F286940450F59F7450F59EF440F5831440F586930440F597960450F58FC448B89440100004183E901F3410F2AF9660F70FF000F284170410F28CC0F59C7410F58C70F5EC8440F285120440F284950440F59D7440F59CF450F58D6450F58CD440F59D1440F59C90F2881A00000000F2889B0000000410FC2C202410FC2C9020F56C10F57C90F57D2410FC2CA05410FC2D1050F56C10F56C20F50C083F80F0F8424010000F3450F5BDAF3410F5BC1450F5BDB0F5BC0450F5CD3440F5CC80F5981C0000000440F58D8F3450F5BDB66410F72F3020F288930010000660FEFD2660FEFC041BA03000000660F73F80466450F70DB93A9080000000F859E00000066440F7EDAF30F7E1C1603914C010000F30F7E2416660F60DA660F60E2660F6FEB660F6FF4660F60DA660F60E2660F68EA660F68F2660FFED9660FFEE1660FFEE9660FFEF10F5CD90F5CE10F5CE90F5CF166450F70C2FF410F28FC410F5CF80F59DF0F59E7410F59E8410F59F00F58DD0F58E666450F70C1FF410F28FC410F5CF80F59DF410F59E00F58DC0F58D9660FFAD9660F6BDA660F67DAF30F10C366410F73FA0466410F73F904D1E04183EA010F8D34FFFFFF4489CA0FAF914801000067428D1482F30F7F04174183F9000F8F53FEFFFF4183F8000F8F03FEFFFFF3440F6FBC2490000000F3440F6FB42480000000F3440F6F6C2470F3440F6F642460F3440F6F5C2450F3440F6F542440F3440F6F4C2430F3440F6F442420F30F6F7C2410F30F6F34244881C4A00000005E5FC3")
    Global Const $_pGDIPEX_ASM_FXBLUR = __GDIPlusEx_ASMCreate("0x535657558B7C24148B7424188B6C241C8B4F0C8B5F108B57148B7F188B761883EC40894C2408895C240C89542410896C2414897C2418897C24208974241C89742424B800000047660F6EF8660F70FF008B5C240C895C24048B7C24188B74241C8B54241083442418040154241C8B54240CC1E202660FEFF6660FEFED660FEFE4B800000000BB00000000BD000000008B4C2414660F6E042E660F60C4660FFDF0660F6FC6660F61C4660FFEE883C30101D883C50483E9017FDA8B4C2414F30F2AD8F30F53DB660F70DB00660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E042E660F6E0E660F60C4660F60CC0F16C1660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE883EB0101D883C60401D783E9017F8FF30F2AD8F30F53DB660F70DB0089EBF7DB8B4C24082B4C24142B4C2414660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E042E660F6E0E660F6E141E660F60C4660F60CC660F60D40F16C10F16CA660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE883C60401D783E9017F95BD000000008B4C2414F30F2AD8F30F53DB660F70DB00660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E06660F6E0C1E660F60C4660F60CC0F16C1660FF9F0660F73F808660FFDF0660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE883C50129E883C60401D783E9017F8A836C2404010F8F18FEFFFF8B7C24248B742420897C24188974241C8B5C2408891C248B7C24188B74241C8B54240CC1E20283442418040154241C8B542410660FEFF6660FEFED660FEFE4B800000000BB00000000BD000000008B4C2414660F6E042E660F60C4660FFDF0660F6FC6660F61C4660FFEE883C30101D883C50483E9017FDA8B4C2414F30F2AD8F30F53DB660F70DB00660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E042E660F6E0E660F60C4660F60CC0F16C1660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE883EB0101D883C60401D783E9017F8FF30F2AD8F30F53DB660F70DB0089EBF7DB8B4C240C2B4C24142B4C2414660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E042E660F6E0E660F6E141E660F60C4660F60CC660F60D40F16C10F16CA660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE883C60401D783E9017F95BD000000008B4C2414F30F2AD8F30F53DB660F70DB00660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E06660F6E0C1E660F60C4660F60CC0F16C1660FF9F0660F73F808660FFDF0660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE883C50129E883C60401D783E9017F8A832C24010F8F19FEFFFF83C4405D5F5E5BC20C00", _
    		"0x5356574154415541564157554883EC50F30F7F3424F30F7F7C2410F3440F7F442420F3440F7F4C2430F3440F7F5424404D31C94D31DB448B4910448B5114448B59184C8B71204C8B7A20B800000047660F6EF8660F70FF00B801000000F3440F2AC066450F70C0004D89FD4D89F44489D34C89E74C89EE4983C4044D01DD4C89D248C1E202660FEFF6660FEFED660FEFE4450F57C9450F57D248C7C0000000004489C1660F6E0406660F60C4660FFDF0660F6FC6660F61C4660FFEE8450F58D0450F58CA4883C00483E9017FD64489C1410F53D9660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E0406660F6E0E660F60C4660F60CC0F16C1660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE8450F5CD0450F58CA4883C6044801D783E9017F93410F53D94889C548F7DD4489C94429C14429C1660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E0406660F6E0E660F6E142E660F60C4660F60CC660F60D40F16C10F16CA660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE84883C6044801D783E9017F93450F57D24489C1410F53D9660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E06660F6E0C2E660F60C4660F60CC0F16C1660FF9F0660F73F808660FFDF0660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE8450F58D0450F5CCA4883C6044801D783E9017F8E83EB010F8F32FEFFFF4D89F54D89FC4489CB4C89E74C89EE4C89D248C1E2024983C4044901D54C89DA660FEFF6660FEFED660FEFE4450F57C9450F57D248C7C0000000004489C1660F6E0406660F60C4660FFDF0660F6FC6660F61C4660FFEE8450F58D0450F58CA4883C00483E9017FD64489C1410F53D9660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E0406660F6E0E660F60C4660F60CC0F16C1660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE8450F5CD0450F58CA4883C6044801D783E9017F93410F53D94889C548F7DD4489D14429C14429C1660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E0406660F6E0E660F6E142E660F60C4660F60CC660F60D40F16C10F16CA660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE84883C6044801D783E9017F93450F57D24489C1410F53D9660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E06660F6E0C2E660F60C4660F60CC0F16C1660FF9F0660F73F808660FFDF0660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE8450F58D0450F5CCA4883C6044801D783E9017F8E83EB010F8F2FFEFFFFF3440F6F542440F3440F6F4C2430F3440F6F442420F30F6F7C2410F30F6F34244883C4505D415F415E415D415C5F5E5BC3")
    Global Const $_pGDIPEX_ASM_FXGREY = __GDIPlusEx_ASMCreate("0x8B5424040F107C24048B4A100FAF4A148B5218660F73DF04B8FF000000F30F2AF0660F70F6000F59FEF30F5BFF660F6BFF660FEFF6660F6F02660F6FC8660F6FE0660F60C6660F68CE660F72D418660FF5C7660FF5CF660F72F418660F70D0B1660F70D9B1660FFEC2660FFECB660F72D008660F72D108660F6BC1660F70C8FA660F70C050660F67C1660F72F008660F72D008660FEBC4660F7F0283C21083E9107F92C21000", "0x4883EC10F30F7F34248B51140FAF5118488B4920660F6FE9660F73FA04660F73FB08660FEBEA660FEBEBB8FF000000F30F2AF0660F70F6000F59EEF30F5BED660F6BED660FEFF6660F6F01660F6FC8660F6FE0660F60C6660F68CE660F72D418660FF5C5660FF5CD660F72F418660F70D0B1660F70D9B1660FFEC2660FFECB660F72D008660F72D108660F6BC1660F70C8FA660F70C050660F67C1660F72F008660F72D008660FEBC4660F7F014883C11083EA107F91F30F6F34244883C410C3")
    #EndRegion
    
    
    _GDIPlus_Startup()
    Global $hGUI, $iFPS = 0, $bExit
    Global Const $fPI = ACos(-1), $fRad = $fPI / 180, $fPI8 = $fPI / 8, $sTitle = "GDI+ Wave v1.3 / FPS: "
    AutoItSetOption("GUIOnEventMode", 1)
    
    
    GDIPlus_Wave()
    
    
    AutoItSetOption("GUIOnEventMode", 0)
    _GDIPlus_Shutdown()
    ConsoleWrite("The end." & @CRLF)
    
    
    Func GDIPlus_Wave()
    	$bExit = False
    	Local Const $iW = 600, $iH = 600
    	$hGUI = GUICreate($sTitle & 0, $iW, $iH)
    	GUISetState(@SW_SHOW, $hGUI)
    
    
    	Local $oBuffer = _GDIPlusEx_BufferCreate($hGUI)
    	_GDIPlus_GraphicsSetSmoothingMode($oBuffer.Gfx, $GDIP_SMOOTHINGMODE_HIGHQUALITY)
    	_GDIPlus_GraphicsSetPixelOffsetMode($oBuffer.Gfx, $GDIP_PIXELOFFSETMODE_HIGHQUALITY)
    	_GDIPlus_GraphicsSetCompositingQuality($oBuffer.Gfx, 2)
    	Local Const $hPen = _GDIPlus_PenCreate(0x80FFFFFF, 1)
    
    
    	Local Const $iDots_X = 16, $iDots_Y = 16, $iDots_Diameter = 32, $iDots_Distance = $iDots_Diameter * 1, $fRadius = $iDots_Distance / 2, $iDots_Radius = $iDots_Diameter / 2
    	Local $iX, $iY, $aCoords[$iDots_Y][$iDots_X][3], _
    		  $iPos_X = ($iW - ($iDots_Diameter + ($iDots_X - 1) * $iDots_Distance)) / 2, _
    		  $iPos_Y = ($iH - ($iDots_Diameter + ($iDots_Y - 1) * $iDots_Distance)) / 2
    
    
    	Local Const $hPath_X = _GDIPlus_PathCreate(), $hPath_Y = _GDIPlus_PathCreate()
    
    
    	$iFPS = 0
    	GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About")
    	Local $fSpeed = -2^32 + 1, $fFrequenz = 2.5
    
    
    	AdlibRegister("CalcFPS", 1000)
    
    
    	Do
    		_GDIPlus_GraphicsClear($oBuffer.Gfx, 0xF0606060)
    
    
    		For $iY = 0 To UBound($aCoords) - 1
    
    
    			For $iX = 0 To UBound($aCoords, 2) - 1
    
    
    				_GDIPlus_PathReset($hPath_X)
    				_GDIPlus_PathReset($hPath_Y)
    
    
    				Switch $iX
    					Case 0 To UBound($aCoords, 2) - 2
    						_GDIPlus_PathAddLine($hPath_X, $iPos_X + $aCoords[$iY][$iX][0], _
    													 $iPos_Y + $aCoords[$iY][$iX][1], _
    													 $iPos_X + $aCoords[$iY][$iX + 1][0], _
    													 $iPos_Y + $aCoords[$iY][$iX + 1][1])
    				EndSwitch
    
    
    				Switch $iY
    					Case 0 To UBound($aCoords) - 2
    								_GDIPlus_PathAddLine($hPath_Y, $iPos_X + $aCoords[$iY][$iX][0], _
    															 $iPos_Y + $aCoords[$iY][$iX][1], _
    															 $iPos_X + $aCoords[$iY + 1][$iX][0], _
    															 $iPos_Y + $aCoords[$iY + 1][$iX][1])
    				EndSwitch
    
    
    				_GDIPlus_GraphicsDrawPath($oBuffer.Gfx, $hPath_X, $hPen)
    				_GDIPlus_GraphicsDrawPath($oBuffer.Gfx, $hPath_Y, $hPen)
    
    
    				$t = ($fSpeed + $iX + $iY) / $fFrequenz
    
    
    				$aCoords[$iY][$iX][0] = $iDots_Radius + $iX * $iDots_Distance + ATan(Sqrt($t)) * Cos(-$t + $fSpeed) * $fRadius
    				$aCoords[$iY][$iX][1] = $iDots_Radius + $iY * $iDots_Distance + Sin($t * ATan($t)) * $fRadius
    
    
    			Next
    		Next
    		$fSpeed += 0.45
    		_GDIPlus_GraphicsDrawString($oBuffer.Gfx, "Coded by UEZ / Eukalyptus", 2, $iH - 12, "Arial", 7.5)
    		_GDIPlusEx_BufferDraw($oBuffer)
    		$iFPS += 1
    		If $bExit Then ExitLoop
    	Until Not Sleep(10)
    
    
    	AdlibUnRegister("CalcFPS")
    	_GDIPlus_PathDispose($hPath_X)
    	_GDIPlus_PathDispose($hPath_Y)
    	_GDIPlus_PenDispose($hPen)
    	$oBuffer = Null
    	GUIDelete($hGUI)
    EndFunc   ;==>GDIPlus_Wave
    
    
    Func _Exit_About()
    	$bExit = True
    EndFunc   ;==>_Exit_About
    
    
    Func CalcFPS()
    	WinSetTitle($hGUI, "", $sTitle & $iFPS)
    	$iFPS = 0
    EndFunc   ;==>CalcFPS
    
    
    Func _GDIPlusEx_BitmapCreate($iWidth, $iHeight, $iColor = 0)
    	$iWidth = Int($iWidth)
    	$iHeight = Int($iHeight)
    	If $iWidth < 1 Or $iHeight < 1 Then Return SetError($GDIP_ERRINVALIDPARAMETER, 1, False)
    	Local $tBmp = __GDIPlusEx_BitmapCreate($iWidth, $iHeight, $iColor)
    	If @error Or Not IsDllStruct($tBmp) Then Return SetError($GDIP_ERRABORTED, 2, False)
    	Local $oBitmap = __GDIPlusEx_BitmapCreateObject($tBmp)
    	If Not IsObj($oBitmap) Then
    		__GDIPlusEx_BitmapDispose($tBmp)
    		Return SetError($GDIP_ERRABORTED, 3, False)
    	EndIf
    	Return $oBitmap
    EndFunc   ;==>_GDIPlusEx_BitmapCreate
    
    
    Func _GDIPlusEx_BufferCreate($hWnd, $iWidth = 0, $iHeight = 0)
    	$iWidth = Int($iWidth)
    	$iHeight = Int($iHeight)
    	If $iWidth < 1 Or $iHeight < 1 Then
    		Local $aSize = WinGetClientSize($hWnd)
    		If $iWidth < 1 Then $iWidth = $aSize[0]
    		If $iHeight < 1 Then $iHeight = $aSize[1]
    	EndIf
    	Local $hDC = _WinAPI_GetDC($hWnd)
    	If @error Then Return SetError(10, $GDIP_ERRABORTED, False)
    	Local $hCDC = _WinAPI_CreateCompatibleDC($hDC)
    	Local $tBmpInfo = DllStructCreate("struct; uint Size; uint Width; int Height; short Planes; short BitCount; uint Compression; uint SizeImage; int XPelsPerMeter; int YPelsPerMeter; uint ClrUsed; uint ClrImportant; endstruct;")
    	DllStructSetData($tBmpInfo, "Size", DllStructGetSize($tBmpInfo))
    	DllStructSetData($tBmpInfo, "Width", $iWidth)
    	DllStructSetData($tBmpInfo, "Height", -($iHeight + 4))
    	DllStructSetData($tBmpInfo, "Planes", 1)
    	DllStructSetData($tBmpInfo, "BitCount", 32)
    	Local $aResult = DllCall("gdi32.dll", "handle", "CreateDIBSection", "handle", 0, "struct*", $tBmpInfo, "uint", 0, "ptr*", 0, "handle", 0, "uint", 0)
    	If @error Or Not $aResult[0] Or Not $aResult[4] Then
    		_WinAPI_DeleteDC($hCDC)
    		_WinAPI_ReleaseDC($hWnd, $hDC)
    		Return SetError(10, $GDIP_ERRABORTED, False)
    	EndIf
    	Local $hDib = $aResult[0]
    	Local $pBits = $aResult[4]
    	$aResult = DllCall("kernel32.dll", "handle", "GlobalAlloc", "uint", 0, "ulong_ptr", 256)
    	If @error Or Not $aResult[0] Then Return SetError(10, $GDIP_ERRABORTED, False)
    	Local $pBuffer = $aResult[0]
    	Local $tBuffer = DllStructCreate("struct; ptr Vtbl; int RefCnt; uint IsGDIPEX; uint Width; uint Height; uint Stride; ptr pBits; handle Gfx; handle Dib; handle DC; handle CDC; handle Wnd; handle Obj; ptr pGlobalFree; ptr pGfxDel; ptr pSelObj; ptr pDelObj; ptr pDelDC; ptr pRelDC; ptr pBitBlt; ptr pQueryInterface; ptr pAddRef; ptr pRelease; ptr pDraw; ptr pGetGfx; ptr pGetBits; ptr pGetW; ptr pGetH; ptr pGetStride; endstruct;", $pBuffer)
    	DllStructSetData($tBuffer, "pBits", $pBits)
    	DllStructSetData($tBuffer, "Dib", $hDib)
    	DllStructSetData($tBuffer, "OBJ", _WinAPI_SelectObject($hCDC, $hDib))
    	DllStructSetData($tBuffer, "Gfx", _GDIPlus_GraphicsCreateFromHDC($hCDC))
    	DllStructSetData($tBuffer, "Width", $iWidth)
    	DllStructSetData($tBuffer, "Height", $iHeight)
    	DllStructSetData($tBuffer, "Stride", $iWidth * 4)
    	DllStructSetData($tBuffer, "DC", $hDC)
    	DllStructSetData($tBuffer, "CDC", $hCDC)
    	DllStructSetData($tBuffer, "Wnd", $hWnd)
    	DllStructSetData($tBuffer, "IsGDIPEX", $_cGDIPEX_ISBUF)
    	DllStructSetData($tBuffer, "pGlobalFree", $_pGDIPEX_LIB_GLOBALFREE)
    	DllStructSetData($tBuffer, "pGfxDel", $_pGDIPEX_LIB_GFXDEL)
    	DllStructSetData($tBuffer, "pSelObj", $_pGDIPEX_LIB_SELOBJ)
    	DllStructSetData($tBuffer, "pDelObj", $_pGDIPEX_LIB_DELOBJ)
    	DllStructSetData($tBuffer, "pDelDC", $_pGDIPEX_LIB_DELDC)
    	DllStructSetData($tBuffer, "pRelDC", $_pGDIPEX_LIB_RELDC)
    	DllStructSetData($tBuffer, "pBitBlt", $_pGDIPEX_LIB_BITBLT)
    	DllStructSetData($tBuffer, "pQueryInterface", $_pGDIPEX_ASM_OBJ_QUERYIF)
    	DllStructSetData($tBuffer, "pAddRef", $_pGDIPEX_ASM_OBJ_ADDREF)
    	DllStructSetData($tBuffer, "pRelease", $_pGDIPEX_ASM_OBJ_RELBUF)
    	DllStructSetData($tBuffer, "pDraw", $_pGDIPEX_ASM_OBJ_BUFDRAW)
    	DllStructSetData($tBuffer, "pGetGfx", $_pGDIPEX_ASM_OBJ_BUFGFX)
    	DllStructSetData($tBuffer, "pGetBits", $_pGDIPEX_ASM_OBJ_BUFBITS)
    	DllStructSetData($tBuffer, "pGetW", $_pGDIPEX_ASM_OBJ_BUFWIDTH)
    	DllStructSetData($tBuffer, "pGetH", $_pGDIPEX_ASM_OBJ_BUFHEIGHT)
    	DllStructSetData($tBuffer, "pGetStride", $_pGDIPEX_ASM_OBJ_BUFSTRIDE)
    	DllStructSetData($tBuffer, "Vtbl", DllStructGetPtr($tBuffer, "pQueryInterface"))
    	DllStructSetData($tBuffer, "RefCnt", 1)
    	Local $oBuffer = ObjCreateInterface($pBuffer, $_sGDIPEX_IIDBUF, $_tagGDIPEX_BUFFER)
    	If Not IsObj($oBuffer) Then
    		_GDIPlus_GraphicsDispose(DllStructGetData($tBuffer, "Gfx"))
    		_WinAPI_SelectObject(DllStructGetData($tBuffer, "CDC"), DllStructGetData($tBuffer, "OBJ"))
    		_WinAPI_DeleteObject(DllStructGetData($tBuffer, "Dib"))
    		_WinAPI_DeleteDC(DllStructGetData($tBuffer, "CDC"))
    		_WinAPI_ReleaseDC(DllStructGetData($tBuffer, "Wnd"), DllStructGetData($tBuffer, "DC"))
    		DllCall("kernel32.dll", "ptr", "GlobalFree", "struct*", $pBuffer)
    		Return SetError(10, $GDIP_ERRABORTED, False)
    	EndIf
    	Return $oBuffer
    EndFunc   ;==>_GDIPlusEx_BufferCreate
    
    
    Func _GDIPlusEx_BufferDraw($oBuffer, $iX = 0, $iY = 0, $iROP = 0x00CC0020)
    	If Not IsObj($oBuffer) Then Return SetError($GDIP_ERRINVALIDPARAMETER, 1, False)
    	Local $iStatus = $oBuffer.Draw($iX, $iY, $iROP)
    	If Not $iStatus Then Return SetError($GDIP_ERRABORTED, 2, False)
    	Return True
    EndFunc   ;==>_GDIPlusEx_BufferDraw
    
    
    Func __GDIPlusEx_ASMCreate(ByRef Const $bBC32, ByRef Const $bBC64)
    	Local $iSize
    	Switch @AutoItX64
    		Case True
    			$iSize = BinaryLen($bBC64)
    		Case Else
    			$iSize = BinaryLen($bBC32)
    	EndSwitch
    	Local $aResult = DllCall("kernel32.dll", "ptr", "VirtualAlloc", "ptr", 0, "ulong_ptr", $iSize + 16, "dword", 0x00001000, "dword", 0x00000040)
    	If @error Or Not $aResult[0] Then Return SetError(1, 0, False)
    	Local $pStruct = Number($aResult[0])
    	If Mod($pStruct, 16) Then $pStruct = $pStruct + 16 - Mod($pStruct, 16)
    	Local $tStruct = DllStructCreate("byte[" & $iSize & "];", $pStruct)
    	Switch @AutoItX64
    		Case True
    			DllStructSetData($tStruct, 1, $bBC64)
    		Case Else
    			DllStructSetData($tStruct, 1, $bBC32)
    	EndSwitch
    	DllCall("kernel32.dll", "bool", "VirtualProtect", "struct*", $pStruct, "ulong_ptr", $iSize, "dword", 16, "dword*", 0)
    	Local $iIdx = $_aGDIPEX_ASMSTRUCT[0] + 1
    	If $iIdx >= UBound($_aGDIPEX_ASMSTRUCT) Then ReDim $_aGDIPEX_ASMSTRUCT[$iIdx + 1]
    	$_aGDIPEX_ASMSTRUCT[0] = $iIdx
    	$_aGDIPEX_ASMSTRUCT[$iIdx] = $pStruct
    	Return $pStruct
    EndFunc   ;==>__GDIPlusEx_ASMCreate
    
    
    Func __GDIPlusEx_BitmapCreate($iW, $iH, $iColor = 0)
    	$iW = Int($iW)
    	$iH = Int($iH)
    	Local $iStride = $iW * 4
    	If Mod($iStride, 16) Then $iStride += 16 - Mod($iStride, 16)
    	Local $aResult = DllCall("kernel32.dll", "handle", "GlobalAlloc", "uint", 0x40, "ulong_ptr", $iStride * ($iH + 4) * 4 + 32)
    	If @error Or Not $aResult[0] Then Return SetError($GDIP_ERRABORTED, 1, False)
    	Local $pScan0 = Number($aResult[0])
    	$aResult = DllCall("kernel32.dll", "handle", "GlobalAlloc", "uint", 0x40, "ulong_ptr", 256)
    	If @error Or Not $aResult[0] Then
    		DllCall("kernel32.dll", "ptr", "GlobalFree", "struct*", $pScan0)
    		Return SetError($GDIP_ERRABORTED, 2, False)
    	EndIf
    	Local $tBitmap = DllStructCreate("struct; ptr Vtbl; int RefCnt; uint IsGDIPEX; uint Width; uint Height; uint Stride; ptr pScan0; ptr pScan0ORIG; endstruct;", $aResult[0])
    	DllStructSetData($tBitmap, "Width", $iW)
    	DllStructSetData($tBitmap, "Height", $iH)
    	DllStructSetData($tBitmap, "Stride", $iStride)
    	DllStructSetData($tBitmap, "pScan0ORIG", $pScan0)
    	If Mod($pScan0, 16) Then $pScan0 += 16 - Mod($pScan0, 16)
    	DllStructSetData($tBitmap, "pScan0", $pScan0)
    	DllStructSetData($tBitmap, "IsGDIPEX", $_cGDIPEX_ISBMP)
    	If $iColor Then DllCallAddress("none", $_pGDIPEX_ASM_BMPCLR, "struct*", $tBitmap, "uint", $iColor)
    	Return $tBitmap
    EndFunc   ;==>__GDIPlusEx_BitmapCreate
    
    
    Func __GDIPlusEx_BitmapCreateObject($tBmp)
    	If @error Or Not IsDllStruct($tBmp) Then Return SetError($GDIP_ERRINVALIDPARAMETER, 1, False)
    	Local $tBitmap = DllStructCreate("struct; ptr Vtbl; int RefCnt; uint IsGDIPEX; uint Width; uint Height; uint Stride; ptr pScan0; ptr pScan0ORIG; handle Gfx; handle Bmp; ptr pGlobalFree; ptr pGfxDel; ptr pBmpDel; ptr pQueryInterface; ptr pAddRef; ptr pRelease; ptr pGetBmp; ptr pGetGfx; ptr pGetScan0; ptr pGetW; ptr pGetH; ptr pGetStride; ptr pDraw; ptr pDrawRect; endstruct;", DllStructGetPtr($tBmp))
    	Local $hBmp = _GDIPlus_BitmapCreateFromScan0(DllStructGetData($tBmp, "Width"), DllStructGetData($tBmp, "Height"), $GDIP_PXF32ARGB, DllStructGetData($tBmp, "Stride"), DllStructGetData($tBmp, "pScan0"))
    	Local $hGfx = _GDIPlus_ImageGetGraphicsContext($hBmp)
    	DllStructSetData($tBitmap, "Bmp", $hBmp)
    	DllStructSetData($tBitmap, "Gfx", $hGfx)
    	DllStructSetData($tBitmap, "pGlobalFree", $_pGDIPEX_LIB_GLOBALFREE)
    	DllStructSetData($tBitmap, "pGfxDel", $_pGDIPEX_LIB_GFXDEL)
    	DllStructSetData($tBitmap, "pBmpDel", $_pGDIPEX_LIB_BMPDEL)
    	DllStructSetData($tBitmap, "pQueryInterface", $_pGDIPEX_ASM_OBJ_QUERYIF)
    	DllStructSetData($tBitmap, "pAddRef", $_pGDIPEX_ASM_OBJ_ADDREF)
    	DllStructSetData($tBitmap, "pRelease", $_pGDIPEX_ASM_OBJ_RELBMP)
    	DllStructSetData($tBitmap, "pGetBmp", $_pGDIPEX_ASM_OBJ_BMPBMP)
    	DllStructSetData($tBitmap, "pGetGfx", $_pGDIPEX_ASM_OBJ_BMPGFX)
    	DllStructSetData($tBitmap, "pGetScan0", $_pGDIPEX_ASM_OBJ_BMPSCAN0)
    	DllStructSetData($tBitmap, "pGetW", $_pGDIPEX_ASM_OBJ_BMPWIDTH)
    	DllStructSetData($tBitmap, "pGetH", $_pGDIPEX_ASM_OBJ_BMPHEIGHT)
    	DllStructSetData($tBitmap, "pGetStride", $_pGDIPEX_ASM_OBJ_BMPSTRIDE)
    	DllStructSetData($tBitmap, "pDraw", $_pGDIPEX_ASM_BMPDRAW)
    	DllStructSetData($tBitmap, "pDrawRect", $_pGDIPEX_ASM_BMPDRAWRECT)
    	DllStructSetData($tBitmap, "Vtbl", DllStructGetPtr($tBitmap, "pQueryInterface"))
    	DllStructSetData($tBitmap, "RefCnt", 1)
    	Local $oBitmap = ObjCreateInterface(DllStructGetPtr($tBmp), $_sGDIPEX_IIDBMP, $_tagGDIPEX_BITMAP)
    	If Not IsObj($oBitmap) Then
    		_GDIPlus_GraphicsDispose($hGfx)
    		_GDIPlus_BitmapDispose($hBmp)
    		Return SetError($GDIP_ERRABORTED, 3, False)
    	EndIf
    	Return $oBitmap
    EndFunc   ;==>__GDIPlusEx_BitmapCreateObject
    
    
    Func __GDIPlusEx_BitmapDispose(ByRef $tBitmap)
    	If Not IsDllStruct($tBitmap) Then Return SetError($GDIP_ERRINVALIDPARAMETER, 1, False)
    	DllCall("kernel32.dll", "ptr", "GlobalFree", "struct*", DllStructGetData($tBitmap, "pScan0ORIG"))
    	DllCall("kernel32.dll", "ptr", "GlobalFree", "struct*", DllStructGetPtr($tBitmap))
    	$tBitmap = 0
    	Return True
    EndFunc   ;==>__GDIPlusEx_BitmapDispose
    
    
    Func __GDIPlusEx_BitmapWarpCreateBitmap($oBitmap, $fX1, $fY1, $fX2, $fY2, $fX3, $fY3, $fX4, $fY4, $bInterpol, ByRef $iX, ByRef $iY)
    	If Not IsObj($oBitmap) Then Return SetError($GDIP_ERRINVALIDPARAMETER, 1, False)
    	Local $tMatrix = DllStructCreate("float WF[8]; float Tmp[72]; int DstX; int DstY; uint DstW; uint DstH; float SrcW; float SrcH;")
    	Local $tWarpPnts = DllStructCreate("float[8];")
    	DllStructSetData($tWarpPnts, 1, $fX1, 1)
    	DllStructSetData($tWarpPnts, 1, $fY1, 2)
    	DllStructSetData($tWarpPnts, 1, $fX2, 3)
    	DllStructSetData($tWarpPnts, 1, $fY2, 4)
    	DllStructSetData($tWarpPnts, 1, $fX3, 5)
    	DllStructSetData($tWarpPnts, 1, $fY3, 6)
    	DllStructSetData($tWarpPnts, 1, $fX4, 7)
    	DllStructSetData($tWarpPnts, 1, $fY4, 8)
    	DllCallAddress("none", $_pGDIPEX_ASM_WARPMXPREP, "struct*", $tMatrix, "struct*", __GDIPlusEx_ObjGetPtr($oBitmap), "struct*", $tWarpPnts, "bool", $bInterpol)
    	Local $iDstW = DllStructGetData($tMatrix, "DstW")
    	Local $iDstH = DllStructGetData($tMatrix, "DstH")
    	If $iDstW < 1 Or $iDstH < 1 Then Return SetError($GDIP_ERRABORTED, 2, False)
    	If Mod($iDstW, 4) Then
    		$iDstW += 4 - Mod($iDstW, 4)
    		DllStructSetData($tMatrix, "DstW", $iDstW)
    	EndIf
    	Local $aResult = DllCallAddress("int", $_pGDIPEX_ASM_WARPMXSLVE, "struct*", $tMatrix)
    	If @error Or $aResult[0] <> 0 Then Return SetError(10, $GDIP_ERRABORTED, False)
    	Local $tWarp = __GDIPlusEx_BitmapCreate($iDstW, $iDstH)
    	$iX = DllStructGetData($tMatrix, "DstX")
    	$iY = DllStructGetData($tMatrix, "DstY")
    	Local $tVal = DllStructCreate("byte Val[356]; byte Pad[16];")
    	Local $pVal = Number(DllStructGetPtr($tVal))
    	$pVal += 16 - Mod($pVal, 16)
    	Local $tValues = DllStructCreate("float WF1[4]; float WF2[4]; float WF3[4]; float WF4[4]; float WF5[4]; float WF6[4]; float WF7[4]; float WF8[4]; float One[4]; float XOff[4]; float SrcW[4]; float SrcH[4]; float SrcS[4]; float TmpX[4]; float TmpX1[4]; float TmpX2[4]; float Idx[4]; float fX[4]; float fY[4]; uint Msk[4]; uint DstW; uint DstH; uint DstStride; uint SrcStride; ptr Dst; ptr Src;", $pVal)
    	DllCallAddress("none", $_pGDIPEX_ASM_WARPVAL, "struct*", $pVal, "struct*", $tMatrix, "uint", $oBitmap.Stride, "uint", $iDstW * 4)
    	DllStructSetData($tValues, "Dst", DllStructGetData($tWarp, "pScan0"))
    	DllStructSetData($tValues, "Src", $oBitmap.Scan0)
    	Switch $bInterpol
    		Case True
    			DllCallAddress("none", $_pGDIPEX_ASM_WARPIP, "struct*", $pVal)
    		Case Else
    			DllCallAddress("none", $_pGDIPEX_ASM_WARP, "struct*", $pVal)
    	EndSwitch
    	Return $tWarp
    EndFunc   ;==>__GDIPlusEx_BitmapWarpCreateBitmap
    
    
    Func __GDIPlusEx_ObjGetPtr($oObj)
    	If Not IsObj($oObj) Then Return SetError($GDIP_ERRINVALIDPARAMETER, 1, 0)
    	Local $pPtr
    	$oObj.QueryInterface("", $pPtr)
    	$oObj.Release
    	Return $pPtr
    EndFunc   ;==>__GDIPlusEx_ObjGetPtr
    
    
    Func __GDIPlusEx_OnExit()
    	If Not IsArray($_aGDIPEX_ASMSTRUCT) Or UBound($_aGDIPEX_ASMSTRUCT) < 1 Or UBound($_aGDIPEX_ASMSTRUCT, 0) <> 1 Then Return
    	If $_aGDIPEX_ASMSTRUCT[0] >= UBound($_aGDIPEX_ASMSTRUCT) Then $_aGDIPEX_ASMSTRUCT[0] = UBound($_aGDIPEX_ASMSTRUCT) - 1
    	For $i = 1 To $_aGDIPEX_ASMSTRUCT[0]
    		DllCall("kernel32.dll", "bool", "VirtualFree", "ptr", $_aGDIPEX_ASMSTRUCT[$i], "ulong_ptr", 0, "dword", 0x00008000)
    	Next
    	_GDIPlus_Shutdown()
    EndFunc   ;==>__GDIPlusEx_OnExit
    Alles anzeigen

    Ist die Vorgänger Version.

    Ich vermute, dass eher in _GDIPlusEx_BitmapWarp() irgendwo Integer benutzt wird und es dadurch zu diesen Darstellungsproblemen kommt.

  • [Logische Tips&Tricks]Gescannte MRZ daten --> Excel --> IE.au3 & Excel tabelle mit Word Dokument Vergleichen

    • UEZ
    • 22. Dezember 2015 um 09:00

    Asyl Anträge vollautomatisch würde ich sagen. Es gibt Leute, die kaufen Immobilien, sanieren sie, um dann Asylanten für 40€/Tag pro Person unterzubringen. Der Staat übernimmt wieder die Sanierung, wenn die Unterkunft nicht mehr benötigt wird. Mir fehlt leider das Kleingeld...

    Oder man automatisiert die Anträge und kassiert dann pro Antrag z.B. 10€ ab. Why not?

  • GDI+ Wave

    • UEZ
    • 21. Dezember 2015 um 23:57

    Hast du eine Idee, wie ich die grauen Linien, die im Bild vorkommen, wenn die Quadranten nicht richtig zueinander liegen, weg bekomme?

    AutoIt
    #AutoIt3Wrapper_Version=b
    #AutoIt3Wrapper_Run_Au3Stripper=y
    #Au3Stripper_Parameters=/so
    
    
    #include <GuiConstantsEx.au3>
    #include <GDIPlus.au3>
    
    
    #Region GDIPlusEx
    Global Const $_cGDIPEX_ISBMP = 0x41455047
    Global Const $_cGDIPEX_ISBUF = 0x42455047
    Global Const $_sGDIPEX_IIDBMP = "{EB22CE37-EE56-458B-AD13-3FC836E8CE49}"
    Global Const $_sGDIPEX_IIDBUF = "{1CB99E61-15BA-4B1F-8C7E-25D00AE60F2D}"
    Global Const $_tagGDIPEX_BUFFER = "Draw int(int;int;uint); Gfx handle(); pBits ptr(); Width int(); Height int(); Stride int();"
    Global Const $_tagGDIPEX_BITMAP = "Bmp handle(); Gfx handle(); Scan0 ptr(); Width int(); Height int(); Stride int(); Draw int(struct*;int;int); DrawRect int(struct*;int;int;uint;uint);"
    Global $_aGDIPEX_ASMSTRUCT[1]
    OnAutoItExitRegister("__GDIPlusEx_OnExit")
    Global Const $_hGDIPEX_GDIPDLL = _GDIPlus_Startup()
    Global Const $_hGDIPEX_MOD_GDI32 = _WinAPI_GetModuleHandle("gdi32.dll")
    Global Const $_hGDIPEX_MOD_GDIPLUS = _WinAPI_GetModuleHandle("gdiplus.dll")
    Global Const $_hGDIPEX_MOD_KERNEL32 = _WinAPI_GetModuleHandle("kernel32.dll")
    Global Const $_hGDIPEX_MOD_USER32 = _WinAPI_GetModuleHandle("User32.dll")
    Global Const $_pGDIPEX_LIB_SELOBJ = _WinAPI_GetProcAddress($_hGDIPEX_MOD_GDI32, "SelectObject")
    Global Const $_pGDIPEX_LIB_DELOBJ = _WinAPI_GetProcAddress($_hGDIPEX_MOD_GDI32, "DeleteObject")
    Global Const $_pGDIPEX_LIB_DELDC = _WinAPI_GetProcAddress($_hGDIPEX_MOD_GDI32, "DeleteDC")
    Global Const $_pGDIPEX_LIB_RELDC = _WinAPI_GetProcAddress($_hGDIPEX_MOD_USER32, "ReleaseDC")
    Global Const $_pGDIPEX_LIB_BITBLT = _WinAPI_GetProcAddress($_hGDIPEX_MOD_GDI32, "BitBlt")
    Global Const $_pGDIPEX_LIB_GLOBALFREE = _WinAPI_GetProcAddress($_hGDIPEX_MOD_KERNEL32, "GlobalFree")
    Global Const $_pGDIPEX_LIB_GFXDEL = _WinAPI_GetProcAddress($_hGDIPEX_MOD_GDIPLUS, "GdipDeleteGraphics")
    Global Const $_pGDIPEX_LIB_BMPDEL = _WinAPI_GetProcAddress($_hGDIPEX_MOD_GDIPLUS, "GdipDisposeImage")
    Global Const $_pGDIPEX_ASM_OBJ_QUERYIF = __GDIPlusEx_ASMCreate("0x538B4424088B5C2410890383400401B8000000005BC20C00", "0x49890883410801B800000000C3")
    Global Const $_pGDIPEX_ASM_OBJ_ADDREF = __GDIPlusEx_ASMCreate("0x8B442404834004018B4004C20400", "0x834108018B4108C3")
    Global Const $_pGDIPEX_ASM_OBJ_RELBUF = __GDIPlusEx_ASMCreate("0x538B5C2408836B0401837B040075448B43388B531C52FFD08B433C8B53288B4B305152FFD08B43408B532052FFD08B43448B532852FFD08B433C8B532C8B4B245152FFD08B433453FFD0B8000000005BC204008B43045BC20400", "0x534889CB836B0801837B080075504883EC20488B4360488B4B28FFD0488B4368488B4B40488B5350FFD0488B4370488B4B30FFD0488B4378488B4B40FFD0488B8380000000488B4B48488B5338FFD0488B43584889D9FFD04883C4205BC38B43085BC3")
    Global Const $_pGDIPEX_ASM_OBJ_RELBMP = __GDIPlusEx_ASMCreate("0x538B5C2408836B0401837B0400752A8B432C8B532052FFD08B43308B532452FFD08B43288B531C52FFD08B432853FFD0B8000000005BC204008B43045BC20400", "0x534889CB836B0801837B080075314883EC20488B4348488B4B30FFD0488B4350488B4B38FFD0488B4340488B4B28FFD0488B43404889D9FFD04883C4205BC38B43085BC3")
    Global Const $_pGDIPEX_ASM_OBJ_BUFDRAW = __GDIPlusEx_ASMCreate("0x5356578B5C24108B7424148B7C2418B8FFFFFFFF817B0847504542752E8B4C241C5183EC08C7042400000000C7442404000000008B5328528B5310528B530C5257568B5324528B434CFFD05F5E5BC21000", "0x534889CB4989D24D89C348C7C0FFFFFFFF81790C47504542754B4883EC484C894C244048C74424380000000048C744243000000000488B43404889442428488B431448894424204D31C9448B4B104D89D84C89D2488B4B38488B8388000000FFD04883C4485BC3")
    Global Const $_pGDIPEX_ASM_OBJ_BUFGFX = __GDIPlusEx_ASMCreate("0x8B5424048B421CC20400", "0x488B4128C3")
    Global Const $_pGDIPEX_ASM_OBJ_BUFBITS = __GDIPlusEx_ASMCreate("0x8B5424048B4218C20400", "0x488B4120C3")
    Global Const $_pGDIPEX_ASM_OBJ_BUFWIDTH = __GDIPlusEx_ASMCreate("0x8B5424048B420CC20400", "0x8B4110C3")
    Global Const $_pGDIPEX_ASM_OBJ_BUFHEIGHT = __GDIPlusEx_ASMCreate("0x8B5424048B4210C20400", "0x8B4114C3")
    Global Const $_pGDIPEX_ASM_OBJ_BUFSTRIDE = __GDIPlusEx_ASMCreate("0x8B5424048B4214C20400", "0x8B4118C3")
    Global Const $_pGDIPEX_ASM_OBJ_BMPBMP = __GDIPlusEx_ASMCreate("0x8B5424048B4224C20400", "0x488B4138C3")
    Global Const $_pGDIPEX_ASM_OBJ_BMPGFX = __GDIPlusEx_ASMCreate("0x8B5424048B4220C20400", "0x488B4130C3")
    Global Const $_pGDIPEX_ASM_OBJ_BMPSCAN0 = __GDIPlusEx_ASMCreate("0x8B5424048B4218C20400", "0x488B4120C3")
    Global Const $_pGDIPEX_ASM_OBJ_BMPWIDTH = __GDIPlusEx_ASMCreate("0x8B5424048B420CC20400", "0x8B4110C3")
    Global Const $_pGDIPEX_ASM_OBJ_BMPHEIGHT = __GDIPlusEx_ASMCreate("0x8B5424048B4210C20400", "0x8B4114C3")
    Global Const $_pGDIPEX_ASM_OBJ_BMPSTRIDE = __GDIPlusEx_ASMCreate("0x8B5424048B4214C20400", "0x8B4118C3")
    Global Const $_pGDIPEX_ASM_BMPDRAW = __GDIPlusEx_ASMCreate("0x5756538B7424108B7C2414817F0847504542740E817F08475045417405E98E010000F30F7E4E0CF30F7E442418660FFEC8660FEFFF660F6FF0F30F7E6F0C660FEACD660FEEC7660FFAC8660F6FD0660FFAD6B801000000660F6EF8660F70FFE0660F66F9660FD7C783F8000F853801000083EC20660FD60C24660F7EC1660F73D804660F7EC38B47148944240C0FAFC38D04888B571801C289542408660F7ED1660F73DA04660F7ED38B4614894424140FAFC38D04888B561801C289542410B800000047660F6EF8660F70FF00B801000000F30F2AF0660FEFED8B5C24048B7C24088B44240C014424088B7424108B442414014424108B0C248A46033C000F8483000000660F6E063CFF7477660F6E0F660F60C5660F60CDF20F70C093F20F70C993660F60C5660F60CD660FFEC7660FFECF0F5CC70F5CCFF30F10D6F30F5CD0F30F59CAF30F10E0F30F58E1F30F53DC660F70D1000F59CA660F70D000660F70DB000F59C20F58C10F59C3F30F10C40F58C7660FFAC7660F6BC0F20F70C039660F67C0660F7E0783C60483C70483E9010F8F63FFFFFF83EB010F8F3FFFFFFF83C420B800000000EB0CB8FEFFFFFFEB05B8FFFFFFFF5B5E5FC21000", "0x575653415441554883EC20F30F7F3424F30F7F7C24104889CE4889D7817F0C47504542740E817F0C475045417405E99D010000F30F7E4E1066410F6EC166410F6ED0660F73F804F30F10C2660FFEC8660FEFFF660F6FF0F30F7E6F10660FEACD660FEEC7660FFAC8660F6FD0660FFAD6B801000000660F6EF8660F70FFE0660F66F9660FD7C783F8000F853801000066410F7EC8660F73D90466410F7EC94831C0660F7EC1660F73D804660F7EC38B47184989C30FAFC3678D0488488B7F204801C74989FA660F7ED1660F73DA04660F7ED38B46184989C50FAFC3678D0488488B76204801C64989F4B800000047660F6EF8660F70FF00B801000000F30F2AF0660FEFED4489CB4C89D74D01DA4C89E64D01EC4489C18A46033C000F8483000000660F6E063CFF7477660F6E0F660F60C5660F60CDF20F70C093F20F70C993660F60C5660F60CD660FFEC7660FFECF0F5CC70F5CCFF30F10D6F30F5CD0F30F59CAF30F10E0F30F58E1F30F53DC660F70D1000F59CA660F70D000660F70DB000F59C20F58C10F59C3F30F10C40F58C7660FFAC7660F6BC0F20F70C039660F67C0660F7E074883C6044883C70483E9010F8F61FFFFFF83EB010F8F49FFFFFF48C7C000000000EB1048C7C0FEFFFFFFEB0748C7C0FFFFFFFFF30F6F7C2410F30F6F34244883C420415D415C5B5E5FC3")
    Global Const $_pGDIPEX_ASM_BMPDRAWRECT = __GDIPlusEx_ASMCreate("0x575653558B7424148B7C2418817F0847504542740E817F08475045417405E9DA010000F30F6F44241CF30F7E560CF30F7E5F0C0F5BC00F5BD20F5BDB0F12C80F28F00F28EA0F5EE90F57FF0F58C80F5DCB0F5FC70F5CC80FC2F906660FD7C7A90F0000000F858C0100000F28D00F5CC60F58C8F30F5BC0660F5BC9F30F5BD283EC20660FD60424660FD64C2408660F7ED1660F73DA04660F7ED38B4714894424140FAFC38D04888B571889D501C2895424108B4424140FAF471001C58B46148944241C8B761889742418B800000047660F6EF8660F70FF00B801000000F30F2AF08B0C24F30F2AC1F30F10C8F30F59CDF30F2CD1C1E20289548D00F30F58C683C1013B4C24087CE0660F70EDE18B5C24048B7C24108B44241401442410F30F2AC3F30F59C5F30F2CC08B7424180FAF44241C01C68B0C248B548D008A4416033C000F8488000000660F6E04163CFF747B660F6E0F660FEFD2660F60C2660F60CAF20F70C093F20F70C993660F60C2660F60CA660FFEC7660FFECF0F5CC70F5CCFF30F10D6F30F5CD0F30F59CAF30F10D0F30F58D1F30F53E2660F70D9000F59CB660F70D8000F59C3660F70E4000F58C10F59C4F30F10C20F58C7660FFAC7660F6BC0F20F70C039660F67C0660F7E0783C70483C1013B4C24080F8C58FFFFFF83C3013B5C240C0F8C25FFFFFF83C420B800000000EB0CB8FEFFFFFFEB05B8FFFFFFFF5D5B5E5FC21800", "0x660F6E4C2428660F6E442430660F62C85756535541544155415641574883EC30F30F7F3424F30F7F7C2410F3440F7F4424204889D74889CE817F0C47504542740E817F0C475045417405E9FA01000066410F6EC066410F6ED1660F73FA04660FEBC2660F73F908660FEBC1F30F7E5610F30F7E5F100F5BC00F5BD20F5BDB0F12C80F28F00F28EA0F5EE90F57FF0F58C80F5DCB0F5FC70F5CC80FC2F906660FD7C7A90F0000000F85940100000F28D00F5CC60F58C8F30F5BC0660F5BC9F30F5BD266490F7EC04D89C149C1E92066490F7ECA4D89D349C1EB20660F7ED1660F73DA04660F7ED34831C08B47184989C50FAFC3678D04884C8B67204C89E54901C44C89E80FAF47144801C58B46184989C74C8B7620B800000047660F6EF8660F70FF00B801000000F30F2AF04831C94489C1F30F2AC1F30F10C8F30F59CDF30F2CD1C1E20289548D00F30F58C683C1014439D17CE14831D2660F70EDE14489CB4C89E74D01ECF30F2AC3F30F59C5F3480F2CC04C89F6410FAFC74801C64489C18B548D008A4416033C000F848C000000660F6E04163CFF747F660F6E0F660FEFD2660F60C2660F60CAF20F70C093F20F70C993660F60C2660F60CA660FFEC7660FFECF0F5CC70F5CCFF30F10D6F30F5CD0F30F59CAF3440F10C0F3440F58C1F3410F53E0660F70D900660F70D0000F59CB0F59C2660F70E4000F58C10F59C4F3410F10C00F58C7660FFAC7660F6BC0F20F70C039660F67C0660F7E074883C70483C1014439D10F8C54FFFFFF83C3014439DB0F8C28FFFFFF48C7C000000000EB1048C7C0FEFFFFFFEB0748C7C0FFFFFFFFF3440F6F442420F30F6F7C2410F30F6F34244883C430415F415E415D415C5D5B5E5FC3")
    Global Const $_pGDIPEX_ASM_BMPCLONE = __GDIPlusEx_ASMCreate("0x5756538B7C24108B7424148B7614F30F7E4E0CF30F7E442418660FFEC8660FEFFF660F6FF0F30F7E6F0C660FEACD660FEEC7660FFAC8660F6FD0660FFAD6B801000000660F6EF8660F70FFE0660F66F9660FD7C783F8000F858F00000083EC20660FD60C24660F7EC1660F73D804660F7EC38B47148944240C0FAFC38D04888B571801C289542408660F7ED1660F73DA04660F7ED38B4614894424140FAFC38D04888B561801C2895424108B5C24048B7C24088B44240C014424088B7424108B442414014424108B0C24F30F6F06F30F7F0783C61083C71083E9047FED83EB017FCD83C420B800000000EB05B8FFFFFFFF5B5E5FC21000", "0x575653415441554889CF4889D6488B7628F30F7E4E1066410F6EC166410F6ED0660F73F804F30F10C2660FFEC8660FEFED660F6FE0F30F7E5F10660FEACB660FEEC5660FFAC8660F6FD0660FFAD4B801000000660F6EE8660F70EDE0660F66E9660FD7C583F8000F858F00000066410F7EC8660F73D90466410F7EC94831C0660F7EC1660F73D804660F7EC38B47184989C30FAFC3678D0488488B7F204801C74989FA660F7ED1660F73DA04660F7ED38B46184989C50FAFC3678D0488488B76204801C64989F44489CB4C89D74D01DA4C89E64D01EC4489C1F30F6F06F30F7F074883C6104883C71083E9047FEB83EB017FD748C7C000000000EB0748C7C0FFFFFFFF415D415C5B5E5FC3")
    Global Const $_pGDIPEX_ASM_BMPTRANS = __GDIPlusEx_ASMCreate("0x578B7C2408660F6E7C240C660F70FF00B800000047660F6EF0660F70F600B8FFFFFF00660F6EE8660F70ED008B4F100FAF4F148B7F18660F6F07660F6FC8660FDBC5660F72D118660FFECE0F5CCE0F59CF0F58CE660FFACE660F72F118660FEBC1660F7F0783C71083E9107FC95FC20800", "0x660F70E900B800000047660F6EE0660F70E400B8FFFFFF00660F6ED8660F70DB008B41140FAF4118488B4920660F6F01660F6FC8660FDBC3660F72D118660FFECC0F5CCC0F59CD0F58CC660FFACC660F72F118660FEBC1660F7F014883C11083E8107FC8C3")
    Global Const $_pGDIPEX_ASM_BMPCLR = __GDIPlusEx_ASMCreate("0x8B542404660F6E442408660F70C0008B4A100FAF4A148B5218660F7F0283C21083E9107FF4C20800", "0x660F6EC2660F70C0008B51140FAF5118488B4920660F7F014883C11083EA107FF3C3")
    Global Const $_pGDIPEX_ASM_WARPMXPREP = __GDIPlusEx_ASMCreate("0x8B5424048B4C2408B801000000660F6EF8F30F2AF8660F70FF00F30F2A710C660F70F600F30F2A6910660F70ED00837C24100074060F5CF70F5CEF660F7EB250010000660F7EAA540100008B4C240C0F10010F1049100F28E00F28D80F5DE10F5FD9660F73D808660F73D9080F5DE00F5FD80F5DE10F5FD9F30F5BE4660F5BDB660FFADC660FD6A240010000660FD69A480100000F5BE4F30F7E010F5CC4660F7E7A20660FD64224660F7E7A50660FD64254F30F7E41080F5CC40F57C90F5CC80F59CE660F7E7A68660FD6426C660FD68A80000000660F7EBA98000000660FD6829C000000F30F7E41100F5CC40F57C90F5CC80F59CD660F7EBAB0000000660FD682B4000000660F7EBAE0000000660FD682E4000000660FD68AEC000000F30F7E41180F5CC40F57C90F5CC80F28D10F59CE0F59D5660F7EBAF8000000660FD682FC000000660FD68A10010000660F7EBA28010000660FD6822C010000660FD69234010000660F7EB288000000660F7EAAF4000000660F7EB218010000660F7EAA3C010000C21000", "0x4883EC20F30F7F3424F30F7F7C2410B801000000660F6EF8F30F2AF8660F70FF00F30F2A7210660F70F600F30F2A6A14660F70ED004983F90074060F5CF70F5CEF660F7EB150010000660F7EA954010000410F1000410F1048100F28E00F28D80F5DE10F5FD9660F73D808660F73D9080F5DE00F5FD80F5DE10F5FD9F30F5BE4660F5BDB660FFADC660FD6A140010000660FD699480100000F5BE4F3410F7E000F5CC4660F7E7920660FD64124660F7E7950660FD64154F3410F7E40080F5CC40F57C90F5CC80F59CE660F7E7968660FD6416C660FD68980000000660F7EB998000000660FD6819C000000F3410F7E40100F5CC40F57C90F5CC80F59CD660F7EB9B0000000660FD681B4000000660F7EB9E0000000660FD681E4000000660FD689EC000000F3410F7E40180F5CC40F57C90F5CC80F28D10F59CE0F59D5660F7EB9F8000000660FD681FC000000660FD68910010000660F7EB928010000660FD6812C010000660FD69134010000660F7EB188000000660F7EA9F4000000660F7EB118010000660F7EA93C010000F30F6F7C2410F30F6F34244883C420C3")
    Global Const $_pGDIPEX_ASM_WARPMXSLVE = __GDIPlusEx_ASMCreate("0x575653558B6C2414B800000080660F6EF883C52031C90F57C00FB6D989D889C26BD20900CA660F6E4C95000F28D70F55D10F28CA0FC2C806660FD7D1F7C20F0000007406F30F10C289C383C00183F8077ECC89DA6BD20900CA837C9500000F841D01000038CB74330FB6F989DE6BFF096BF60931C08D1406660F6E4495008D1C07660F6E4C9D00660F7E4C9500660F7E449D0083C00183F8087EDA0FB6D16BD20A8B44950083F8000F84D3000000660F6EC00FB6F16BF60988CD0FB6D501F2660F6E4C9500F30F5EC8660F7E4C950080C50180FD087EE388CD80C50180FD077F3F0FB6FD6BFF0989FA00CA660F6E4495000FB6C189FA89F301C201C3660F6E4C9500660F6E549D00F30F59D0F30F5CCA660F7E4C950083C00183F8087ED6EBB980C10180F9070F8EEAFEFFFF8B7C2414B90700000089CA6BD20983C208660F6E449500660F7E048F89CB83C30183FB077F2689CA6BD20901DA660F6E449500660F6E0C9F660F6E148FF30F59C8F30F5CD1660F7E148FEBD283E9017DB831C0EB05B8FFFFFFFF5D5B5E5FC20400", "0x5756534889CF488D7120B800000080660F6EE84831C90F57C04889CB4889D84889C2486BD2094801CA660F6E0C960F28D50F55D10F28CA0FC2C806660FD7D1F7C20F0000007407F30F10C24889C34883C0014883F8077EC74889DA486BD2094801CA833C96000F84350100004839CB74374989C84989D94D6BC0094D6BC9094831C0498D1401660F6E0496498D1C00660F6E0C9E660F7E0C96660F7E049E4883C0014883F8087EDA4889CA486BD20A8B049683F8000F84E6000000660F6EC04989CA4D6BD2094989C94C89CA4C01D2660F6E0C96F30F5EC8660F7E0C964983C1014983F9087EE24989C84983C0014983F8077F444D89C14D6BC9094C89CA4801CA660F6E04964889C84C89CA4C89D34801C24801C3660F6E0C96660F6E149EF30F59D0F30F5CCA660F7E0C964883C0014883F8087ED3EBB24883C1014883F9070F8ED0FEFFFF48C7C1070000004889CA486BD2094883C208660F6E0496660F7E048F4889CB4883C3014883FB077F284889CA486BD2094801DA660F6E0496660F6E0C9F660F6E148FF30F59C8F30F5CD1660F7E148FEBCE4883E9017DB031C0EB05B8FFFFFFFF5B5E5FC3")
    Global Const $_pGDIPEX_ASM_WARPVAL = __GDIPlusEx_ASMCreate("0x57568B7C240C8B742410B907000000660F6E048E660F70C00089CAC1E2040F29041783E9017DE8B801000000F30F2AC0660F70C0000F298780000000B803000000F30F2AC0660F73F804B802000000F30F2AC0660F70C0D2660F73F8040F298790000000660F6E8650010000660F6E8E54010000660F70C000660F70C9000F2987A00000000F298FB00000008B44241489874C010000C1E802F30F2AC0660F70C0000F2987C0000000B800000047660F6EC0660F70C000660F7F8730010000F30F7E8648010000660FD687400100008B4424188987480100005E5FC21000", "0x49C7C20700000066420F6E0492660F70C0004D89D349C1E304420F2904194983EA017DE3B801000000F30F2AC0660F70C0000F298180000000B803000000F30F2AC0660F73F804B802000000F30F2AC0660F70C0D2660F73F8040F298190000000660F6E8250010000660F6E8A54010000660F70C000660F70C9000F2981A00000000F2989B00000004489814C01000041C1E802F3410F2AC0660F70C0000F2981C0000000B800000047660F6EC0660F70C000660F7F8130010000F30F7E8248010000660FD6814001000044898948010000C3")
    Global Const $_pGDIPEX_ASM_WARP = __GDIPlusEx_ASMCreate("0x575653558B6C24148BBD500100008BB5540100008B8D4001000083E904660F6EF9660F70FF000F5BFF0F58BD900000000F2875100F286D400F59F70F59EF0F5875000F586D300F597D600F58BD800000008B9D44010000660F6EE3660F70E4000F5BE40F5CA58000000083EB010F2845700F288D800000000F59C40F58C70F5EC80F285D200F2855500F59DC0F59D40F58DE0F58D50F59D90F59D10F2885A00000000F288DB00000000FC2C3020FC2CA020F56C10F57C90FC2CB050F56C10F57C90FC2CA050F56C10F50C083F80F0F8495000000F30F5BD2F30F5BDB0F5BD20F5BDB0F5995C00000000F58DAF30F5BDB660F72F302660FEFC0A9010000007509660F7EDA660F6E0416660F73DB04A902000000750D660F7EDA660F6E0C16660F62C1660F73DB04A904000000750C660F7EDA660F6E0C160F16C1660F73DB04A9080000007512660F7EDA660F6E0C16660F73F90C660FEBC189DA0FAF95480100008D148AF30F7F041783FB000F8FF1FEFFFF83F9000F8F9FFEFFFF5D5B5E5FC20400", "0x57564883EC20F30F7F3424F30F7F7C2410488BB950010000488BB158010000448B81400100004183E80466410F6EF8660F70FF000F5BFF0F58B9900000000F2871100F2869400F59F70F59EF0F58310F5869300F5979600F58B980000000448B894401000066410F6EE1660F70E4000F5BE40F5CA1800000004183E9010F2841700F2889800000000F59C40F58C70F5EC80F2859200F2851500F59DC0F59D40F58DE0F58D50F59D90F59D10F2881A00000000F2889B00000000FC2C3020FC2CA020F56C10F57C90FC2CB050F56C10F57C90FC2CA050F56C10F50C083F80F0F849B000000F30F5BD2F30F5BDB0F5BD20F5BDB0F5991C00000000F58DAF30F5BDB660F72F302660FEFC04831D2A9010000007509660F7EDA660F6E0416660F73DB04A902000000750D660F7EDA660F6E0C16660F62C1660F73DB04A904000000750C660F7EDA660F6E0C160F16C1660F73DB04A9080000007512660F7EDA660F6E0C16660F73F90C660FEBC14489CA0FAF914801000067428D1482F30F7F04174183F9000F8FE9FEFFFF4183F8000F8F93FEFFFFF30F6F7C2410F30F6F34244883C4205E5FC3")
    Global Const $_pGDIPEX_ASM_WARPIP = __GDIPlusEx_ASMCreate("0x575653558B6C241483EC048BBD500100008BB5540100008B8D40010000890C24832C2404660F6E3C24660F70FF000F5BFF0F58BD900000000F2875100F286D400F59F70F59EF0F5875000F586D300F597D600F58BD800000000F29BDD00000000F29B5E00000000F29ADF00000008B9D4401000083EB01F30F2AFB660F70FF000F2845700F288D800000000F59C70F5885D00000000F5EC80F2875200F286D500F59F70F59EF0F58B5E00000000F58ADF00000000F59F10F59E90F2885A00000000F288DB00000000FC2C6020FC2CD020F56C10F57C90F57D20FC2CE050FC2D5050F56C10F56C20F50C083F80F0F8434010000F30F5BFEF30F5BC50F5BFF0F5BC00F5CF70F5CE80F5985C00000000F58F8F30F5BFF660F72F7020F29AD200100000F29B5100100000F29BD000100000F288D30010000660FEFC0B903000000660F73F804A9080000000F85B90000008B948D00010000F30F7E3C1603954C010000F30F7E3416660FEFD2660F60FA660F60F2660F6FEF660F6FE6660F60FA660F60F2660F68EA660F68E2660FFEF9660FFEF1660FFEE9660FFEE10F5CF90F5CF10F5CE90F5CE1660F6E9C8D100100000F289580000000660F70DB000F5CD30F59FA0F59F20F59EB0F59E30F58FD0F58F4660F6E9C8D200100000F289580000000660F70DB000F5CD30F59FA0F59F30F58FE0F58F9660FFAF9660FEFD2660F6BFA660F67FAF30F10C7D1E083E9010F8D2CFFFFFF89DA0FAF95480100008B0C248D148AF30F7F041783FB000F8F44FEFFFF833C24000F8FE6FDFFFF83C4045D5B5E5FC20400", "0x57564881ECA0000000F30F7F3424F30F7F7C2410F3440F7F442420F3440F7F4C2430F3440F7F542440F3440F7F5C2450F3440F7F642460F3440F7F6C2470F3440F7FB42480000000F3440F7FBC2490000000488BB950010000488BB158010000440F28A180000000448B81400100004831D24183E80466450F6EF866450F70FF00450F5BFF440F58B990000000440F287110440F286940450F59F7450F59EF440F5831440F586930440F597960450F58FC448B89440100004183E901F3410F2AF9660F70FF000F284170410F28CC0F59C7410F58C70F5EC8440F285120440F284950440F59D7440F59CF450F58D6450F58CD440F59D1440F59C90F2881A00000000F2889B0000000410FC2C202410FC2C9020F56C10F57C90F57D2410FC2CA05410FC2D1050F56C10F56C20F50C083F80F0F8424010000F3450F5BDAF3410F5BC1450F5BDB0F5BC0450F5CD3440F5CC80F5981C0000000440F58D8F3450F5BDB66410F72F3020F288930010000660FEFD2660FEFC041BA03000000660F73F80466450F70DB93A9080000000F859E00000066440F7EDAF30F7E1C1603914C010000F30F7E2416660F60DA660F60E2660F6FEB660F6FF4660F60DA660F60E2660F68EA660F68F2660FFED9660FFEE1660FFEE9660FFEF10F5CD90F5CE10F5CE90F5CF166450F70C2FF410F28FC410F5CF80F59DF0F59E7410F59E8410F59F00F58DD0F58E666450F70C1FF410F28FC410F5CF80F59DF410F59E00F58DC0F58D9660FFAD9660F6BDA660F67DAF30F10C366410F73FA0466410F73F904D1E04183EA010F8D34FFFFFF4489CA0FAF914801000067428D1482F30F7F04174183F9000F8F53FEFFFF4183F8000F8F03FEFFFFF3440F6FBC2490000000F3440F6FB42480000000F3440F6F6C2470F3440F6F642460F3440F6F5C2450F3440F6F542440F3440F6F4C2430F3440F6F442420F30F6F7C2410F30F6F34244881C4A00000005E5FC3")
    Global Const $_pGDIPEX_ASM_FXBLUR = __GDIPlusEx_ASMCreate("0x535657558B7C24148B7424188B6C241C8B4F0C8B5F108B57148B7F188B761883EC40894C2408895C240C89542410896C2414897C2418897C24208974241C89742424B800000047660F6EF8660F70FF008B5C240C895C24048B7C24188B74241C8B54241083442418040154241C8B54240CC1E202660FEFF6660FEFED660FEFE4B800000000BB00000000BD000000008B4C2414660F6E042E660F60C4660FFDF0660F6FC6660F61C4660FFEE883C30101D883C50483E9017FDA8B4C2414F30F2AD8F30F53DB660F70DB00660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E042E660F6E0E660F60C4660F60CC0F16C1660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE883EB0101D883C60401D783E9017F8FF30F2AD8F30F53DB660F70DB0089EBF7DB8B4C24082B4C24142B4C2414660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E042E660F6E0E660F6E141E660F60C4660F60CC660F60D40F16C10F16CA660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE883C60401D783E9017F95BD000000008B4C2414F30F2AD8F30F53DB660F70DB00660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E06660F6E0C1E660F60C4660F60CC0F16C1660FF9F0660F73F808660FFDF0660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE883C50129E883C60401D783E9017F8A836C2404010F8F18FEFFFF8B7C24248B742420897C24188974241C8B5C2408891C248B7C24188B74241C8B54240CC1E20283442418040154241C8B542410660FEFF6660FEFED660FEFE4B800000000BB00000000BD000000008B4C2414660F6E042E660F60C4660FFDF0660F6FC6660F61C4660FFEE883C30101D883C50483E9017FDA8B4C2414F30F2AD8F30F53DB660F70DB00660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E042E660F6E0E660F60C4660F60CC0F16C1660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE883EB0101D883C60401D783E9017F8FF30F2AD8F30F53DB660F70DB0089EBF7DB8B4C240C2B4C24142B4C2414660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E042E660F6E0E660F6E141E660F60C4660F60CC660F60D40F16C10F16CA660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE883C60401D783E9017F95BD000000008B4C2414F30F2AD8F30F53DB660F70DB00660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E06660F6E0C1E660F60C4660F60CC0F16C1660FF9F0660F73F808660FFDF0660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE883C50129E883C60401D783E9017F8A832C24010F8F19FEFFFF83C4405D5F5E5BC20C00", _
    		"0x5356574154415541564157554883EC50F30F7F3424F30F7F7C2410F3440F7F442420F3440F7F4C2430F3440F7F5424404D31C94D31DB448B4910448B5114448B59184C8B71204C8B7A20B800000047660F6EF8660F70FF00B801000000F3440F2AC066450F70C0004D89FD4D89F44489D34C89E74C89EE4983C4044D01DD4C89D248C1E202660FEFF6660FEFED660FEFE4450F57C9450F57D248C7C0000000004489C1660F6E0406660F60C4660FFDF0660F6FC6660F61C4660FFEE8450F58D0450F58CA4883C00483E9017FD64489C1410F53D9660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E0406660F6E0E660F60C4660F60CC0F16C1660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE8450F5CD0450F58CA4883C6044801D783E9017F93410F53D94889C548F7DD4489C94429C14429C1660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E0406660F6E0E660F6E142E660F60C4660F60CC660F60D40F16C10F16CA660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE84883C6044801D783E9017F93450F57D24489C1410F53D9660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E06660F6E0C2E660F60C4660F60CC0F16C1660FF9F0660F73F808660FFDF0660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE8450F58D0450F5CCA4883C6044801D783E9017F8E83EB010F8F32FEFFFF4D89F54D89FC4489CB4C89E74C89EE4C89D248C1E2024983C4044901D54C89DA660FEFF6660FEFED660FEFE4450F57C9450F57D248C7C0000000004489C1660F6E0406660F60C4660FFDF0660F6FC6660F61C4660FFEE8450F58D0450F58CA4883C00483E9017FD64489C1410F53D9660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E0406660F6E0E660F60C4660F60CC0F16C1660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE8450F5CD0450F58CA4883C6044801D783E9017F93410F53D94889C548F7DD4489D14429C14429C1660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E0406660F6E0E660F6E142E660F60C4660F60CC660F60D40F16C10F16CA660FFDF0660FF9F1660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE84883C6044801D783E9017F93450F57D24489C1410F53D9660F6FC5660FFEC70F5CC70F59C30F58C7660FFAC7660F6BC0660F67C0660F7E07660F6E06660F6E0C2E660F60C4660F60CC0F16C1660FF9F0660F73F808660FFDF0660F6FCE660F6FC6660F69CC660F61C4660FFAE9660FFEE8450F58D0450F5CCA4883C6044801D783E9017F8E83EB010F8F2FFEFFFFF3440F6F542440F3440F6F4C2430F3440F6F442420F30F6F7C2410F30F6F34244883C4505D415F415E415D415C5F5E5BC3")
    Global Const $_pGDIPEX_ASM_FXGREY = __GDIPlusEx_ASMCreate("0x8B5424040F107C24048B4A100FAF4A148B5218660F73DF04B8FF000000F30F2AF0660F70F6000F59FEF30F5BFF660F6BFF660FEFF6660F6F02660F6FC8660F6FE0660F60C6660F68CE660F72D418660FF5C7660FF5CF660F72F418660F70D0B1660F70D9B1660FFEC2660FFECB660F72D008660F72D108660F6BC1660F70C8FA660F70C050660F67C1660F72F008660F72D008660FEBC4660F7F0283C21083E9107F92C21000", "0x4883EC10F30F7F34248B51140FAF5118488B4920660F6FE9660F73FA04660F73FB08660FEBEA660FEBEBB8FF000000F30F2AF0660F70F6000F59EEF30F5BED660F6BED660FEFF6660F6F01660F6FC8660F6FE0660F60C6660F68CE660F72D418660FF5C5660FF5CD660F72F418660F70D0B1660F70D9B1660FFEC2660FFECB660F72D008660F72D108660F6BC1660F70C8FA660F70C050660F67C1660F72F008660F72D008660FEBC4660F7F014883C11083EA107F91F30F6F34244883C410C3")
    #EndRegion
    
    
    
    
    _GDIPlus_Startup()
    Global $hGUI, $iFPS = 0, $bExit
    Global Const $fPI = ACos(-1), $fRad = $fPI / 180, $fPI8 = $fPI / 8, $sTitle = "GDI+ Wave v1.3.1 / FPS: "
    AutoItSetOption("GUIOnEventMode", 1)
    
    
    GDIPlus_Wave()
    
    
    AutoItSetOption("GUIOnEventMode", 0)
    _GDIPlus_Shutdown()
    ConsoleWrite("The end." & @CRLF)
    
    
    Func GDIPlus_Wave()
    	$bExit = False
    	Local Const $iW = 600, $iH = 600
    	$hGUI = GUICreate($sTitle & 0, $iW, $iH)
    	GUISetState(@SW_SHOW, $hGUI)
    
    
    	Local $oBuffer = _GDIPlusEx_BufferCreate($hGUI)
    ;~ 	_GDIPlus_GraphicsSetSmoothingMode($oBuffer.Gfx, $GDIP_SMOOTHINGMODE_HIGHQUALITY)
    	_GDIPlus_GraphicsSetPixelOffsetMode($oBuffer.Gfx, $GDIP_PIXELOFFSETMODE_HIGHQUALITY)
    	Local Const $hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF), $hPen = _GDIPlus_PenCreate(0x80FFFFFF, 1)
    
    
    	Local Const $iDots_X = 12, $iDots_Y = 12, $iDots_Diameter = 40, $iDots_Distance = $iDots_Diameter * 1, $fRadius = $iDots_Distance / 2, $iDots_Radius = $iDots_Diameter / 2
    	Local Const $iW_Bmp = ($iDots_Diameter + ($iDots_X - 1) * $iDots_Distance), $iH_Bmp = ($iDots_Diameter + ($iDots_Y - 1) * $iDots_Distance)
    	Local $iX, $iY, $aCoords[$iDots_Y][$iDots_X][3], _
    		  $iPos_X = ($iW - $iW_Bmp) / 2, _
    		  $iPos_Y = ($iH - $iH_Bmp) / 2
    
    
    	Local Const $hBitmap = _GDIPlus_BitmapCreateFromMemory(_Pirate()), $iW_Bmp_Flag = _GDIPlus_ImageGetWidth($hBitmap), $iH_Bmp_Flag = _GDIPlus_ImageGetHeight($hBitmap)
    	Local $hImg = _GDIPlus_BitmapCreateFromScan0($iW_Bmp / $iDots_X, $iH_Bmp / $iDots_Y), $hCtx = _GDIPlus_ImageGetGraphicsContext($hImg)
    	For $iY = 0 To UBound($aCoords) - 1
    		For $iX = 0 To UBound($aCoords, 2) - 1
    			_GDIPlus_GraphicsClear($hCtx, 0)
    			_GDIPlus_GraphicsDrawImageRectRect($hCtx, $hBitmap, $iX * $iW_Bmp_Flag / ($iDots_X - 1), _
    																$iY * $iH_Bmp_Flag / ($iDots_Y - 1), _
    																$iW_Bmp_Flag / ($iDots_X - 1), _
    																$iH_Bmp_Flag / ($iDots_Y - 1), _
    																0, 0, $iW_Bmp / $iDots_X, $iH_Bmp / $iDots_Y)
    			$aCoords[$iY][$iX][2] = _GDIPlusEx_BitmapCreateFromImage($hImg)
    		Next
    	Next
    	_GDIPlus_GraphicsDispose($hCtx)
    	_GDIPlus_ImageDispose($hImg)
    	_GDIPlus_ImageDispose($hBitmap)
    
    
    	Local Const $hPath_X = _GDIPlus_PathCreate(), $hPath_Y = _GDIPlus_PathCreate(), $hPath = _GDIPlus_PathCreate()
    
    
    	$iFPS = 0
    	GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About")
    	Local $fSpeed = -2^32 + 1, $fFrequenz = 2.5, $aPointsX, $aPointsY
    	Global $tWarp = DllStructCreate("struct; float X1; float Y1; float X2; float Y2; float X3; float Y3; float X4; float Y4; endstruct;")
    
    
    	AdlibRegister("CalcFPS", 1000)
    
    
    	Do
    		_GDIPlus_GraphicsClear($oBuffer.Gfx, 0xFF606060)
    
    
    		For $iY = 0 To UBound($aCoords) - 1
    			For $iX = 0 To UBound($aCoords, 2) - 1
    				$t = ($fSpeed + $iX + $iY) / $fFrequenz
    				$aCoords[$iY][$iX][0] = $iDots_Radius + $iX * $iDots_Distance + ATan($fSpeed) * Cos(-$t + $fSpeed) * $fRadius
    				$aCoords[$iY][$iX][1] = $iDots_Radius + $iY * $iDots_Distance + ATan($fSpeed * 2) * Sin($t * ATan($t)) * $fRadius
    			Next
    		Next
    
    
    		For $iY = 0 To UBound($aCoords) - 2
    			For $iX = 0 To UBound($aCoords, 2) - 2
    				$tWarp.X1 = $iPos_X + $aCoords[$iY][$iX][0]
    				$tWarp.Y1 = $iPos_Y + $aCoords[$iY][$iX][1]
    				$tWarp.X2 = $iPos_X + $aCoords[$iY][$iX + 1][0]
    				$tWarp.Y2 = $iPos_Y + $aCoords[$iY][$iX + 1][1]
    				$tWarp.X3 = $iPos_X + $aCoords[$iY + 1][$iX][0]
    				$tWarp.Y3 = $iPos_Y + $aCoords[$iY + 1][$iX][1]
    				$tWarp.X4 = $iPos_X + $aCoords[$iY + 1][$iX + 1][0]
    				$tWarp.Y4 = $iPos_Y + $aCoords[$iY + 1][$iX + 1][1]
    				_GDIPlusEx_BitmapWarp($oBuffer, $aCoords[$iY][$iX][2], _
    												$tWarp.X1, $tWarp.Y1, _
    												$tWarp.X2, $tWarp.Y2, _
    												$tWarp.X3, $tWarp.Y3, _
    												$tWarp.X4, $tWarp.Y4)
    			Next
    		Next
    		$fSpeed += 0.45
    		_GDIPlus_GraphicsDrawString($oBuffer.Gfx, "Coded by UEZ / Eukalyptus", 2, $iH - 12, "Arial", 7.5)
    		_GDIPlusEx_BufferDraw($oBuffer)
    		$iFPS += 1
    		If $bExit Then ExitLoop
    	Until Not Sleep(10)
    
    
    	AdlibUnRegister("CalcFPS")
    	_GDIPlus_PathDispose($hPath_X)
    	_GDIPlus_PathDispose($hPath_Y)
    	_GDIPlus_PathDispose($hPath)
    	_GDIPlus_PenDispose($hPen)
    	_GDIPlus_BrushDispose($hBrush)
    	$oBuffer = Null
    	For $iY = 0 To UBound($aCoords) - 1
    		For $iX = 0 To UBound($aCoords, 2) - 1
    			$aCoords[$iY][$iX][2] = Null
    		Next
    	Next
    	GUIDelete($hGUI)
    EndFunc   ;==>GDIPlus_Wave
    
    
    Func _Exit_About()
    	$bExit = True
    EndFunc   ;==>_Exit_About
    
    
    Func CalcFPS()
    	WinSetTitle($hGUI, "", $sTitle & $iFPS)
    	$iFPS = 0
    EndFunc   ;==>CalcFPS
    
    
    ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2015-09-19
    
    
    Func _Pirate($bSaveBinary = False, $sSavePath = @ScriptDir)
    	Local $Pirate
    	$Pirate &= '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'
    	$Pirate &= '0+TpzRqSwDWWQBQAAAFACiAAAIKAAAACLAAABALAABvG1mlmkkNs1aqWVk0ysqAAsIRkRAAAsIKCWDZ0l5QprKOuNc1qLmmQBZQAUiiKAFAQsBYEsLFIoAAAAgAAAIoSiAAdOfSXLcaVFsAlRYWliSqgLILmmYBBAAsSiAazo9PPpzjiKA1jpzlWLABQACpQAUiwUIogLLAAAAAAQsAAAAAACKIBvGjU3mblQ1JDbA0goUoigQuaSSxIsQAALJQXOzeO/GMWFWDWOnMCwBQAAUAFgsUgAKBLAAAAQAVAUSwLAAAAABAA743Y5LVw9/mOU704PTo8l9ZfK9GTi7Dg9PU8M+hg8L1xPK78jIILAEonTHaMTryXKrJvPSVx68gLBQABQFJYLAWUgAKQAAAAAEKgqUlgssAAAAAAIsL6vJ6THp8/pj08e3OqsjeucrrnjDfHpY4uujnbzO2eULNbPPz9fA556ZMTastWMXY56uTpnrxllqybdprz8vRzs5CygAWUAAAAWBYAFgAAAgKBLACggAAAAAAAEsHTnT0d+HpOxC56czlz6ciTnDrrj1EDTEOucU3vzo7cbs5NymsbK6ajjnvzOVQ9nm1Jc51iunbj1xrlc71nyzpz1CUAUAAAAAFgWAAAACKCBQAEKCKIAAAAACLBZTt7/D7zXHh5DtyyLAAWDeuXQW0XrwiaxK6cpAAADWuY6OdNejhqEzs3Lub4dfP3uXn9XlQKAUAAAAAAAAAJQAgACiAWAsCwALAAABFEsGs7O/s5djx+T1+UgACiW7M9HaO9aL873eGprO445686yAAAUL3OHXn0OVkOnTj6JrzdeXVOnm78EgqgWCwAAAAAABCoKAlAICywAWACwAAAAAAEBvGz2duOong+r86uc1BZomtdTHTp6I53UJrl0OHm9Pmq7yhjeDE3msqIBXYz6byOO89I87tmpvluXPbnsc++DhdZsAAAAFIAAAQAAAAAWACwBQAQFIAAAABKJYPp64euOMDycvoYrx997OeuthvEN8GTpz5+avXw5ju57M6501mUjps4X0dDl7MZjt83UNery+84+T0+Ws9eOo7YmV77xiOnHrK84sJQogAAAAEoQAAAAAAAAFgsCwAAAAAAIDp9X43rPbx7w4vJI9jxSvVPPqPZjhmu9mI8ssoC9OWiWU1kG8Q0yKgaz3PQzIeTtwre99ca8mevLTt18vpTnc6OAsAAAAAASwWUQAAAAAAAAAFgAAAAAAAiwdOfY79vBqMopZTeNZjWPXwr0+fpzjhNZq3pk52Dpj0ecIKQAqDXfz073lCZsPV146575cuvHU16PP1rn04xnphKoAAAAAEoiwAAAAAAAAAAFIAAAAAAACejhsdOXaPPO/Cm8U6Wd4vL0czm30PHjv2rfi+h4jl6/L9A5+LfMFJWzm1kAWUdcbORDr0dM78ud4ubrGlmdZuaCpQAAAACWAAAAAAAAAAAAACywAAAAAEG89jN1iPX4foeWvPrI6ejyfRMc+3GLvHSsW5Onj9fgLIFmzHTHY1JuPPn08KyB0z6jE64jzCu/bx7zqYLFlGdZqhKgqUAAAAAAgAAAAAAAAAAAAAAAAABDt6PN6Yxy6cT1OXY8DeKe/wek7XHpjl0ujjnvk5eftg4478659NYHS4N46cTM7+cA17fL6YudbPnCleyXxUIKubEWUAAWCwKlCCpRLAAAAAAAAAAABYAAAAAAFuxrmNNZl1rl1Tfi+l4a59eXaO95dT0b8XM9l8fc5zl1M8vRwrpw9fKOXdgvNzrryAaO3TKPRvODwBdfQ8HU4LkssLLbMXWQAAAAAACwAAAAAAAAAAAAABSAAFJveQsFljeVWd/P6U6TXU+Tn3+Ktejxaj1+bv5ln0vmfQs5SU7+LtwPf4+/lOmc5iLuubpCdcjPTnuPV59+dZLD19eWk4ct5JLFazqyoJN5JYLAssLAAAALAsAAAAAAAAAAAAAB1JqQllKkFmjVx0l'
    	$Pirate &= '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'
    	$Pirate &= 'OvkXyFZys7lmcs5XyFZysyngBhXREaSJR1BHS0QHGdIX8ndvo5V6ijRtes0KN+aeEHURm0gbTphOM8AsRB9G1GrRK6jUlZke7vUUcJFAETJ0DZTW2oFG/ob0mEEaRApKnvQSFMqZFAgniCBKOmET66+hglw3cXKaTomsdudAQThLSVOiFOgmfWXqyzUaxSaR3Pg20N1D2o6bUAU0jvBaZadDU2/uRsFb0DRKan9VQm3PV7gckqe1Yi2S4aAsMyjfST7PxQDTPdNRhZkb1acrjf3Him/pQrp1/cwpU1is90FnnSD7oWrChQoUUjuAhMTpHum02UqVPBHahCY86PHuRogqO+Kk6fHuRcrdbrfvhcwiNJt7oCWqSp74CV5N6hPt7rCO5ozdzsMRkXxr418S+FfCvhXxhZAsoWUIMC+IL4wiwLKFAUIjibbyRBq0J+x927emEEbNCjUaQVBpmWdE8wo69QYR+3vGbtWEdzYVlSppmCKzLOi5TWFlRYiNEayNv6oAiIATh7thh3nD6joJWZZisxUrMp0TQFZ1nU6IUKFFWiXYiPUaN6sSws6x90L+cNFAULmrO1OcxSFIQKjhARaAiWrMFnQcFLF9VCNAYTn5kE6g6ndLbI+7Kw+lOxQEcQlTrmkqVK2pMIvU65WYrNUFE0uXSm0db3X9BYpIPE1EJrcy+NFsdharbvsgnW9y246wse/EFlTAnbCZpG3L/KC8+E1O903qBk2OP1cEIDcBFNWJ0hWQR42CV5/inkMzUb7tvUEN1jiW6gKNbKa1DqKasUmBZC54gEPqxfzRkZp2Q2QTr+4beh+zSINYUIBZUAjvQoJ/SK34WtlBixCgmiSWQnCBSKQi1R7lu6KBhPbKLaAINq1XUiS5DdOxQg8FquipU6oTWINTjAKCwgsS+JdePDUCpUJ3uMEyiEQp2iQWLIgwrKak0hYp0NMHRK2UBQEA1SAjihOcXUG6H1bcvugYRfS4QKdb27XZSDIKurLOF8gWdHETXAnYLZbIGBwTtTbXhBPdJRuAoUUYU4Ly73OC+Cd1CN6woIWfZNEjE2bweOBqmjzQJwgGo3bKf7lqZiLEfCneayiSTH0WHs3EvUiKu4wYEolO6kE6xq2xQMoj3DQiv5hQor5CZad3XNMIS596Ef8APjzJtzdChqDt7oHYob4dQaeWLynDY0w25WG6w8PZ5AHINqgqUa+PdBFYSeyDVqEL+CvH85d2sAQ3T7+cyc6ToGxOx0gI9NMMItRHvgimKMwNAimjc7N/lqC8ygnH7aQrrfM6+iJQCd00wyiU4++iERuNkFijerOh68CnleNAE6M31a1sEQaBN6U7ooER77DuV4PWw7Ym7a4X+dzCAUUhBFqy1CcE2lzbQEdgE7o4D7nD6vBNBtRwg0Y6GtoEEamhUfWlgPsT9TjD71aE+4Th/wA6C5b9PeASrLMvKYUE5stph3dsc6FvDzCC8xJ8uTN2+d00iB/nMl7sxrZpu2+Jajbu6D7sCoXgpvU/bEZd7crlh9TP9CE6Wr5CC54cmguadi1ycwwEcFEfewOzidIEpx+/lieftRrSU4OCjVHtI02aNxh9eIN2XxW5gWkUYftP2xT9H9Sw+jHCwOrFP1asT/KzplP6tEIbLymWcatXlw+2q/sQJVtXhqdsQ7MxlynOREUF3GUbof5EyMLZPOZC7z9EDFWtlEEIVFLMJmoTet3VwR64NR0W0eH3w7sd9jZygZNObaVKngccx0RsTJqHLNHtwANMxoFPI2IaHKSE5bTc8w0tEnEO+k7e1jhmjAnI0Y6FKIRplcVkblbhucCxw4AEUNkTNYlGFMDV41X9bGgisaWXPUatNIRygiGl7HFH6tLvq1rY2C2nOUZNRKIgnUTrjgBUUn08cFtNkL3R0NMhzspxIch9luVMD6oORKF6QoXiZBQFQETPA1wRvwba49ABwE6Zo2ynQDBBDhsrULpHEFmpdOdPDtBv2F+9jXGmFZHegR2G'
    	$Pirate &= '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'
    	$Pirate &= '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'
    	$Pirate &= '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'
    	$Pirate &= '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'
    	$Pirate &= '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'
    	$Pirate &= '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'
    	$Pirate &= '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'
    	$Pirate &= '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'
    	$Pirate &= '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'
    	$Pirate &= 'whWh8kKP3qJSxH4eiaiCJVKWWILBNOpU5hipfxNzhRmbOGZIObsgNMwkzh47tdm5qb+gEZUepNzHRf8AM0fMVehnzK2zyCFNH7JGcr6MEU5irt7QtL8zSWDGG5dwx1fkqVZT8IYHkFwTJhBe3myUgFeioxl718L7zytzwI3zB3YzJvZv4lh9sNpBGQNwLST+ZeBdMwXkXNvw3OYENx6c9lxlzxK7eI9L6X057L/zP30svmv4g8KViVdAedxFa/SpVzpi1VmVha+4oYW/iYlXxeoiAlMI6QU/TIRlkTmOc3X2hQRVlnxBE9LlyEuBjcVZG9wXHc47Ctyun26V0P8ABr63H1gEqQtlO4WW8cQ2tMqmHaC35+iCwIe4w2cSiQqTCCgcVB8QWXL21gNwIeAlLWrTBKmP0axKxqZiOxdGFmR+BMFrbgbiz2mr+JvGKRek8B/MquuMEBs6HSpXZWOnMO2+6+lf4R9YgeY/EtwqbK3CRaKyGToY7q6W8TkjeYY7i5j3NQKl18Mr8VblrGc0PqJsUfPMpYebZU3x9A3DZ4lgjHaxDAYuLVzgfiICrV18TX8zLsbbaiDgMCb/ADB7KZegmQuGqINI631Y9H6Q9ty/8F+uKDpcwa2R5f1FzBGROY4LCzKj0qFPEr1LWYAUEoNlYshEVw9S8Ghf3ljTytiD55hiDZrKYFzuNo0bIpdMBLXnfmXRCV3FXmIlIbuFa0vCWU+5oLrcpbVg5gYXxEAvbdS3JLrzHSAOnxmAp8FmFX94DzXnxH8Qh0dzZ1ToSv03D106gRxgSxeYLAHGY5XAw/xGAUmGDoTMnjmMsRFFBCFqt+ZkP9/EAauOWW7GGPl5hpPBDV+8z+KVDJSkwxcsvnzLvDs4lxEfESV1C2YzmbVQ5h0tDR46VA5HDGJT6YBQbdvmAstoYNoiGAzfxK0wxY+oZJvB9y1+RiuSh/mIbja0U656mY9CMf0x2vDBl5GCcE+Obfkni3lN3n2RZFWpoBni5gFPbcemUluVR7g2205dRAM28k0ULpY+COF8eWWldXolomCKG4RobLxHlPczp5M/MKsDwz5gYwj98wnLUMzNcMuxlgC1QtRnllzAaweYlna7YNvBMxz4gJCOuIEYUh5SocXIbDRMhrdRS0YjsW5dROJEJkE8kDIr5IHpqviLrNwO2ofqChbmKG47jXKitiEKRhF0wHZfxLVP8k2AoDz/AHmjgGvMKtIvGiU3gMzTlYsSbT+MxG3yfL2VC5NJ6jAVp0wazBfDqIim/E6mSIeUcCzI/ZgZeU8RxaD6Zeie3EFyPxJYMXBEBCmCy/yylLWV9zO/PQTfBg5iWh5EwZtwcxhEadJhIF1kiq4xyQnC/iC05Ne5vqdt/p/3iD1HZsLlwyVvy/7ArVo3tf6mQNXlmur7Ez4gpkfBqZYR8Wf1EaizCmLlCzb4ZIovQyPiHLlw1uFR1ZLRlW1vsGkSNEnw9R3hBAt1ClSA2g/mMgpIqfECMt9Inh+9nhZ94ict/eUzncbrQwA0twP9xrH4uWLe8uJXmuPiPkUP5giONBgPCdkAeFwwJn2RsHxcavHUqX1f1HNebHpgqWvMPVSGa5PEYTDZhdYZg3/Mt4RIWMfiIgG5yIuLHYlV/JM5pDfGJutchxdygtp9xj2uHgwI0lMeE8kWoLNtPDCBRe4vQ6bgWwWsq1MDgOZ99AC7cMsoA8QgOYY4i2a+Y7maJYx5xLrBZVR31MzT/gv6HdZ4lidDB5+n/cEV2LX1CbRPEzZpccNODOY3kKlmbBPjTGgxeYLznIHgZ+bxHoFQNsd1t0GmK1/+LNPRS2stW2X1uDxMnKQ7jiUZ0RRS1oOZiXik/fTeHIMrCrREIriKkQb1uPvEU/G4PZ57K/TiMpaYQqMEAbrhTgqW/wAInSCz8EJT0E9MMWOIXawFRyHzV/zAkG1JyzBawu2MbG8wU9KPFgtLGtHVtdbPeWCt7+jcJdh6jUVvktC3ctis9kFh'
    	$Pirate &= 'hGKy+gQxQbBMAYxX3i2t/eDUoZf1gJCqJV+0H++x9nw+PiA43YliczdQ3eCKlSKerZVikARbHi6jps2V+WJi9GC0GDkOITbXHcRk1v18sEjQRfLFavYF/bu1fzibhp5f8uOpgAWpntfmOrSO46XuYB7tmK99b+k/pt2wam12v2gtizw8k8hWV5PHydQXUUbfPyjMtwSg4tJS4QH/ANoS+oEcEHmN9GOIOvJDeQX8QewhLgq8zArNf6IzpjgdQXRcraVceisn3GGHpDtXB4mb4IaX3/brme1BV1lljFC3E1Xr9KP8AjleuJhyH5jpr3HiOz4SINqr48eulNnE0DhsivDX9nJAqN4isHepkfkqOy1xHFzwfcVybCXRa2wdtCMa6inb0SujCVAoZQQ5QXXBA1pE/PaorRma8FL5L+eoWGkbI61c9A5nMU/k6EP0Z/wGMFq1B/A5rI91DCigFiXsCnIftHYeSZrhWfPPW1VeJgwuqXzUq8jdS1vUYQE2/EvTmBel7P2jvsoPNLPmG4bUHIRLrkUMUWLNGWqVqsdUEJYFC341AsuUev8Au6hcGuZ7F5bm4amy5tCnxr9ZUNyA9K7gpXAYF69y5mwKXzSY/Lv3MVZ5X2XKy/GZbIWmHZ9yJeMc5XhlbU8XErxcRpb0xGr5gU25XEDV2y9BJfEz3hlAMQhH6zLT8IKprh5fEcHnCMVqvPWi2xmENwzWWucK/fqisaZUj4bJzBiOLm0RAdb6kz+qsHeFT7iQDZNc+pRMUFAq3x/URFrabWOfePDyQKBkO46vDjqhGlY+IacwKB4lpR6mrBBNsbg9RUWObjNkLB5uMEYPxBKkUelfkl0+RiXlTAt81qCeLEFwoDs5soq+6xa+MQRanb1iy9woBPKGlhNoTf8AS3ue9Ch8viDzPNxHe25Zgvmo3xmvsEoBHLf2JsQYCuZYpu25VZjfZR1XtdB5Mv171fBfXMqTxMpBrSK5ZS9ApXe5QL8XEtjbiWholsDyjDSHzM05X9o7KvwhQ1xo+IxGy1u1814lyMWl7jUVByHMsYAKDwdicE38Gv7n5OCHgyzBf/ij0/dxg34itdNDDcph4jhZk7K/UvGP5RqUgRsaalrcY9Q1ttDHwL18Ebg3/ZDSOczBpY4Inzr4dElScAtQzds3zogKYbX5ho2y2huvtBlu3ZZmEANHREwDYNmXRyVAUF3OQTfAtFIyANUe2riGG+DRUfIfjVw3TV08HiCpNC6yRzdBmvL57TQ/MJE0EWJjFXAEB+fPxXRj9nXLgPvBPzltfmA2r4ZeZwkNzYkb39QBf4zX6kFtBc2K34ilpZZxmLtb8zRyxZaytQz/ADGUPG39zUezWaTg+Rhp/OIpFeU5GJIAGrrH5go2NMYsgJa+SOyt5B4liMZQ0DgP4Ibg+SXArbqmDN4/vBTNfGKzjd+5khclpl+IEbjWJdhtM04WOna6lvPay9RjwaIO1tZmiieC42Rlx/v/AFHpdfdBDAhWk2J7jcMn2iU1OYKjUJ8wy9xNmGI6T9QcrTlgYi3z5gO8w1mUA1Xz4lgLGjWuY7XZbcVvgzDxKtkNDnh+bmp7Q5uBt2/kS8iztdH8Q3KglSlylla76MCKZb8Rty4ugUA/MtG3U9EX/EFRVu+0atviVNy7F4iUXbEILXiXCR4vlfBM8ZAFTcKGtJrdswGGlmUkFdG/Q9e4llAGANBEjDch4U5vEoTl3czJ5RLI8M3mtLlCXp4lr8TmyYSsiNkZ8u3X6TZweHLBKYOCGVgzlwTK1URXmhbZmICXxh1AWBTgS6DwEVkOSz2VkgDVQRl6pgSeyDBRFjgzApEpN9tV42FCPHhmGr/aW9nmYa0l4wVLeXsqGJAaXdBWMZqK/cLVW8tRTSWB4luLRDDBFgT/AFn3jL4gNB4i6Mqyq1cWBUHL/UZNht9wzOCZVKdy0SUfUuXfqWh6ifAxEaezj9GrQtgFv9ZFVZZe7YuFLalLxvmU/kcEzlx7'
    	$Pirate &= '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'
    	$Pirate &= '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'
    	$Pirate &= '01H6C4h9HmPU1/jf/9k='
    	Local $bString = _WinAPI_Base64Decode($Pirate)
    	If @error Then Return SetError(1, 0, 0)
    	$bString = Binary($bString)
    	If $bSaveBinary Then
    		Local Const $hFile = FileOpen($sSavePath & "\Pirate_788x788.jpg", 18)
    		If @error Then Return SetError(2, 0, $bString)
    		FileWrite($hFile, $bString)
    		FileClose($hFile)
    	EndIf
    	Return $bString
    EndFunc   ;==>_Pirate
    
    
    Func _WinAPI_Base64Decode($sB64String)
    	Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
    	If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
    	Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
    	$aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
    	If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
    	Return DllStructGetData($bBuffer, 1)
    EndFunc   ;==>_WinAPI_Base64Decode
    
    
    Func _GDIPlusEx_BitmapCreate($iWidth, $iHeight, $iColor = 0)
    	$iWidth = Int($iWidth)
    	$iHeight = Int($iHeight)
    	If $iWidth < 1 Or $iHeight < 1 Then Return SetError($GDIP_ERRINVALIDPARAMETER, 1, False)
    	Local $tBmp = __GDIPlusEx_BitmapCreate($iWidth, $iHeight, $iColor)
    	If @error Or Not IsDllStruct($tBmp) Then Return SetError($GDIP_ERRABORTED, 2, False)
    	Local $oBitmap = __GDIPlusEx_BitmapCreateObject($tBmp)
    	If Not IsObj($oBitmap) Then
    		__GDIPlusEx_BitmapDispose($tBmp)
    		Return SetError($GDIP_ERRABORTED, 3, False)
    	EndIf
    	Return $oBitmap
    EndFunc   ;==>_GDIPlusEx_BitmapCreate
    
    
    Func _GDIPlusEx_BitmapCreateFromImage($hImage, $iWidth = 0, $iHeight = 0, $hImgAttr = 0, $iInterpolationMode = 6)
    	Local $iImgW = _GDIPlus_ImageGetWidth($hImage)
    	Local $iImgH = _GDIPlus_ImageGetHeight($hImage)
    	If @error Or Not $iImgW Or Not $iImgH Then Return SetError($GDIP_ERRINVALIDPARAMETER, 1, False)
    	If $iWidth = 0 Then $iWidth = $iImgW
    	If $iHeight = 0 Then $iHeight = $iImgH
    	Local $oBitmap = _GDIPlusEx_BitmapCreate($iWidth, $iHeight)
    	If @error Then Return SetError(@error, @extended, False)
    	Local $iIP = _GDIPlus_GraphicsGetInterpolationMode($oBitmap.Gfx)
    	If $iIP <> $iInterpolationMode Then _GDIPlus_GraphicsSetInterpolationMode($oBitmap.Gfx, $iInterpolationMode)
    	_GDIPlus_GraphicsDrawImageRectRect($oBitmap.Gfx, $hImage, 0, 0, $iImgW, $iImgH, 0, 0, $iWidth, $iHeight, $hImgAttr)
    	If $iIP <> $iInterpolationMode Then _GDIPlus_GraphicsSetInterpolationMode($oBitmap.Gfx, $iIP)
    	Return $oBitmap
    EndFunc   ;==>_GDIPlusEx_BitmapCreateFromImage
    
    
    Func _GDIPlusEx_BitmapWarp($oBuffer, $oBitmap, $fX1, $fY1, $fX2, $fY2, $fX3, $fY3, $fX4, $fY4, $bInterpol = False)
    	If Not IsObj($oBuffer) Then Return SetError($GDIP_ERRINVALIDPARAMETER, 1, False)
    	Local $iX, $iY
    	Local $tWarp = __GDIPlusEx_BitmapWarpCreateBitmap($oBitmap, $fX1, $fY1, $fX2, $fY2, $fX3, $fY3, $fX4, $fY4, $bInterpol, $iX, $iY)
    	If @error Or Not IsDllStruct($tWarp) Then Return SetError($GDIP_ERRABORTED, 2, $tWarp)
    	DllCallAddress("int", $_pGDIPEX_ASM_BMPDRAW, "struct*", $tWarp, "struct*", __GDIPlusEx_ObjGetPtr($oBuffer), "int", $iX, "int", $iY)
    	__GDIPlusEx_BitmapDispose($tWarp)
    	Return True
    EndFunc   ;==>_GDIPlusEx_BitmapWarp
    
    
    Func _GDIPlusEx_BufferCreate($hWnd, $iWidth = 0, $iHeight = 0)
    	$iWidth = Int($iWidth)
    	$iHeight = Int($iHeight)
    	If $iWidth < 1 Or $iHeight < 1 Then
    		Local $aSize = WinGetClientSize($hWnd)
    		If $iWidth < 1 Then $iWidth = $aSize[0]
    		If $iHeight < 1 Then $iHeight = $aSize[1]
    	EndIf
    	Local $hDC = _WinAPI_GetDC($hWnd)
    	If @error Then Return SetError(10, $GDIP_ERRABORTED, False)
    	Local $hCDC = _WinAPI_CreateCompatibleDC($hDC)
    	Local $tBmpInfo = DllStructCreate("struct; uint Size; uint Width; int Height; short Planes; short BitCount; uint Compression; uint SizeImage; int XPelsPerMeter; int YPelsPerMeter; uint ClrUsed; uint ClrImportant; endstruct;")
    	DllStructSetData($tBmpInfo, "Size", DllStructGetSize($tBmpInfo))
    	DllStructSetData($tBmpInfo, "Width", $iWidth)
    	DllStructSetData($tBmpInfo, "Height", -($iHeight + 4))
    	DllStructSetData($tBmpInfo, "Planes", 1)
    	DllStructSetData($tBmpInfo, "BitCount", 32)
    	Local $aResult = DllCall("gdi32.dll", "handle", "CreateDIBSection", "handle", 0, "struct*", $tBmpInfo, "uint", 0, "ptr*", 0, "handle", 0, "uint", 0)
    	If @error Or Not $aResult[0] Or Not $aResult[4] Then
    		_WinAPI_DeleteDC($hCDC)
    		_WinAPI_ReleaseDC($hWnd, $hDC)
    		Return SetError(10, $GDIP_ERRABORTED, False)
    	EndIf
    	Local $hDib = $aResult[0]
    	Local $pBits = $aResult[4]
    	$aResult = DllCall("kernel32.dll", "handle", "GlobalAlloc", "uint", 0, "ulong_ptr", 256)
    	If @error Or Not $aResult[0] Then Return SetError(10, $GDIP_ERRABORTED, False)
    	Local $pBuffer = $aResult[0]
    	Local $tBuffer = DllStructCreate("struct; ptr Vtbl; int RefCnt; uint IsGDIPEX; uint Width; uint Height; uint Stride; ptr pBits; handle Gfx; handle Dib; handle DC; handle CDC; handle Wnd; handle Obj; ptr pGlobalFree; ptr pGfxDel; ptr pSelObj; ptr pDelObj; ptr pDelDC; ptr pRelDC; ptr pBitBlt; ptr pQueryInterface; ptr pAddRef; ptr pRelease; ptr pDraw; ptr pGetGfx; ptr pGetBits; ptr pGetW; ptr pGetH; ptr pGetStride; endstruct;", $pBuffer)
    	DllStructSetData($tBuffer, "pBits", $pBits)
    	DllStructSetData($tBuffer, "Dib", $hDib)
    	DllStructSetData($tBuffer, "OBJ", _WinAPI_SelectObject($hCDC, $hDib))
    	DllStructSetData($tBuffer, "Gfx", _GDIPlus_GraphicsCreateFromHDC($hCDC))
    	DllStructSetData($tBuffer, "Width", $iWidth)
    	DllStructSetData($tBuffer, "Height", $iHeight)
    	DllStructSetData($tBuffer, "Stride", $iWidth * 4)
    	DllStructSetData($tBuffer, "DC", $hDC)
    	DllStructSetData($tBuffer, "CDC", $hCDC)
    	DllStructSetData($tBuffer, "Wnd", $hWnd)
    	DllStructSetData($tBuffer, "IsGDIPEX", $_cGDIPEX_ISBUF)
    	DllStructSetData($tBuffer, "pGlobalFree", $_pGDIPEX_LIB_GLOBALFREE)
    	DllStructSetData($tBuffer, "pGfxDel", $_pGDIPEX_LIB_GFXDEL)
    	DllStructSetData($tBuffer, "pSelObj", $_pGDIPEX_LIB_SELOBJ)
    	DllStructSetData($tBuffer, "pDelObj", $_pGDIPEX_LIB_DELOBJ)
    	DllStructSetData($tBuffer, "pDelDC", $_pGDIPEX_LIB_DELDC)
    	DllStructSetData($tBuffer, "pRelDC", $_pGDIPEX_LIB_RELDC)
    	DllStructSetData($tBuffer, "pBitBlt", $_pGDIPEX_LIB_BITBLT)
    	DllStructSetData($tBuffer, "pQueryInterface", $_pGDIPEX_ASM_OBJ_QUERYIF)
    	DllStructSetData($tBuffer, "pAddRef", $_pGDIPEX_ASM_OBJ_ADDREF)
    	DllStructSetData($tBuffer, "pRelease", $_pGDIPEX_ASM_OBJ_RELBUF)
    	DllStructSetData($tBuffer, "pDraw", $_pGDIPEX_ASM_OBJ_BUFDRAW)
    	DllStructSetData($tBuffer, "pGetGfx", $_pGDIPEX_ASM_OBJ_BUFGFX)
    	DllStructSetData($tBuffer, "pGetBits", $_pGDIPEX_ASM_OBJ_BUFBITS)
    	DllStructSetData($tBuffer, "pGetW", $_pGDIPEX_ASM_OBJ_BUFWIDTH)
    	DllStructSetData($tBuffer, "pGetH", $_pGDIPEX_ASM_OBJ_BUFHEIGHT)
    	DllStructSetData($tBuffer, "pGetStride", $_pGDIPEX_ASM_OBJ_BUFSTRIDE)
    	DllStructSetData($tBuffer, "Vtbl", DllStructGetPtr($tBuffer, "pQueryInterface"))
    	DllStructSetData($tBuffer, "RefCnt", 1)
    	Local $oBuffer = ObjCreateInterface($pBuffer, $_sGDIPEX_IIDBUF, $_tagGDIPEX_BUFFER)
    	If Not IsObj($oBuffer) Then
    		_GDIPlus_GraphicsDispose(DllStructGetData($tBuffer, "Gfx"))
    		_WinAPI_SelectObject(DllStructGetData($tBuffer, "CDC"), DllStructGetData($tBuffer, "OBJ"))
    		_WinAPI_DeleteObject(DllStructGetData($tBuffer, "Dib"))
    		_WinAPI_DeleteDC(DllStructGetData($tBuffer, "CDC"))
    		_WinAPI_ReleaseDC(DllStructGetData($tBuffer, "Wnd"), DllStructGetData($tBuffer, "DC"))
    		DllCall("kernel32.dll", "ptr", "GlobalFree", "struct*", $pBuffer)
    		Return SetError(10, $GDIP_ERRABORTED, False)
    	EndIf
    	Return $oBuffer
    EndFunc   ;==>_GDIPlusEx_BufferCreate
    
    
    Func _GDIPlusEx_BufferDraw($oBuffer, $iX = 0, $iY = 0, $iROP = 0x00CC0020)
    	If Not IsObj($oBuffer) Then Return SetError($GDIP_ERRINVALIDPARAMETER, 1, False)
    	Local $iStatus = $oBuffer.Draw($iX, $iY, $iROP)
    	If Not $iStatus Then Return SetError($GDIP_ERRABORTED, 2, False)
    	Return True
    EndFunc   ;==>_GDIPlusEx_BufferDraw
    
    
    Func __GDIPlusEx_ASMCreate(ByRef Const $bBC32, ByRef Const $bBC64)
    	Local $iSize
    	Switch @AutoItX64
    		Case True
    			$iSize = BinaryLen($bBC64)
    		Case Else
    			$iSize = BinaryLen($bBC32)
    	EndSwitch
    	Local $aResult = DllCall("kernel32.dll", "ptr", "VirtualAlloc", "ptr", 0, "ulong_ptr", $iSize + 16, "dword", 0x00001000, "dword", 0x00000040)
    	If @error Or Not $aResult[0] Then Return SetError(1, 0, False)
    	Local $pStruct = Number($aResult[0])
    	If Mod($pStruct, 16) Then $pStruct = $pStruct + 16 - Mod($pStruct, 16)
    	Local $tStruct = DllStructCreate("byte[" & $iSize & "];", $pStruct)
    	Switch @AutoItX64
    		Case True
    			DllStructSetData($tStruct, 1, $bBC64)
    		Case Else
    			DllStructSetData($tStruct, 1, $bBC32)
    	EndSwitch
    	DllCall("kernel32.dll", "bool", "VirtualProtect", "struct*", $pStruct, "ulong_ptr", $iSize, "dword", 16, "dword*", 0)
    	Local $iIdx = $_aGDIPEX_ASMSTRUCT[0] + 1
    	If $iIdx >= UBound($_aGDIPEX_ASMSTRUCT) Then ReDim $_aGDIPEX_ASMSTRUCT[$iIdx + 1]
    	$_aGDIPEX_ASMSTRUCT[0] = $iIdx
    	$_aGDIPEX_ASMSTRUCT[$iIdx] = $pStruct
    	Return $pStruct
    EndFunc   ;==>__GDIPlusEx_ASMCreate
    
    
    Func __GDIPlusEx_BitmapCreate($iW, $iH, $iColor = 0)
    	$iW = Int($iW)
    	$iH = Int($iH)
    	Local $iStride = $iW * 4
    	If Mod($iStride, 16) Then $iStride += 16 - Mod($iStride, 16)
    	Local $aResult = DllCall("kernel32.dll", "handle", "GlobalAlloc", "uint", 0x40, "ulong_ptr", $iStride * ($iH + 4) * 4 + 32)
    	If @error Or Not $aResult[0] Then Return SetError($GDIP_ERRABORTED, 1, False)
    	Local $pScan0 = Number($aResult[0])
    	$aResult = DllCall("kernel32.dll", "handle", "GlobalAlloc", "uint", 0x40, "ulong_ptr", 256)
    	If @error Or Not $aResult[0] Then
    		DllCall("kernel32.dll", "ptr", "GlobalFree", "struct*", $pScan0)
    		Return SetError($GDIP_ERRABORTED, 2, False)
    	EndIf
    	Local $tBitmap = DllStructCreate("struct; ptr Vtbl; int RefCnt; uint IsGDIPEX; uint Width; uint Height; uint Stride; ptr pScan0; ptr pScan0ORIG; endstruct;", $aResult[0])
    	DllStructSetData($tBitmap, "Width", $iW)
    	DllStructSetData($tBitmap, "Height", $iH)
    	DllStructSetData($tBitmap, "Stride", $iStride)
    	DllStructSetData($tBitmap, "pScan0ORIG", $pScan0)
    	If Mod($pScan0, 16) Then $pScan0 += 16 - Mod($pScan0, 16)
    	DllStructSetData($tBitmap, "pScan0", $pScan0)
    	DllStructSetData($tBitmap, "IsGDIPEX", $_cGDIPEX_ISBMP)
    	If $iColor Then DllCallAddress("none", $_pGDIPEX_ASM_BMPCLR, "struct*", $tBitmap, "uint", $iColor)
    	Return $tBitmap
    EndFunc   ;==>__GDIPlusEx_BitmapCreate
    
    
    Func __GDIPlusEx_BitmapCreateObject($tBmp)
    	If @error Or Not IsDllStruct($tBmp) Then Return SetError($GDIP_ERRINVALIDPARAMETER, 1, False)
    	Local $tBitmap = DllStructCreate("struct; ptr Vtbl; int RefCnt; uint IsGDIPEX; uint Width; uint Height; uint Stride; ptr pScan0; ptr pScan0ORIG; handle Gfx; handle Bmp; ptr pGlobalFree; ptr pGfxDel; ptr pBmpDel; ptr pQueryInterface; ptr pAddRef; ptr pRelease; ptr pGetBmp; ptr pGetGfx; ptr pGetScan0; ptr pGetW; ptr pGetH; ptr pGetStride; ptr pDraw; ptr pDrawRect; endstruct;", DllStructGetPtr($tBmp))
    	Local $hBmp = _GDIPlus_BitmapCreateFromScan0(DllStructGetData($tBmp, "Width"), DllStructGetData($tBmp, "Height"), $GDIP_PXF32ARGB, DllStructGetData($tBmp, "Stride"), DllStructGetData($tBmp, "pScan0"))
    	Local $hGfx = _GDIPlus_ImageGetGraphicsContext($hBmp)
    	DllStructSetData($tBitmap, "Bmp", $hBmp)
    	DllStructSetData($tBitmap, "Gfx", $hGfx)
    	DllStructSetData($tBitmap, "pGlobalFree", $_pGDIPEX_LIB_GLOBALFREE)
    	DllStructSetData($tBitmap, "pGfxDel", $_pGDIPEX_LIB_GFXDEL)
    	DllStructSetData($tBitmap, "pBmpDel", $_pGDIPEX_LIB_BMPDEL)
    	DllStructSetData($tBitmap, "pQueryInterface", $_pGDIPEX_ASM_OBJ_QUERYIF)
    	DllStructSetData($tBitmap, "pAddRef", $_pGDIPEX_ASM_OBJ_ADDREF)
    	DllStructSetData($tBitmap, "pRelease", $_pGDIPEX_ASM_OBJ_RELBMP)
    	DllStructSetData($tBitmap, "pGetBmp", $_pGDIPEX_ASM_OBJ_BMPBMP)
    	DllStructSetData($tBitmap, "pGetGfx", $_pGDIPEX_ASM_OBJ_BMPGFX)
    	DllStructSetData($tBitmap, "pGetScan0", $_pGDIPEX_ASM_OBJ_BMPSCAN0)
    	DllStructSetData($tBitmap, "pGetW", $_pGDIPEX_ASM_OBJ_BMPWIDTH)
    	DllStructSetData($tBitmap, "pGetH", $_pGDIPEX_ASM_OBJ_BMPHEIGHT)
    	DllStructSetData($tBitmap, "pGetStride", $_pGDIPEX_ASM_OBJ_BMPSTRIDE)
    	DllStructSetData($tBitmap, "pDraw", $_pGDIPEX_ASM_BMPDRAW)
    	DllStructSetData($tBitmap, "pDrawRect", $_pGDIPEX_ASM_BMPDRAWRECT)
    	DllStructSetData($tBitmap, "Vtbl", DllStructGetPtr($tBitmap, "pQueryInterface"))
    	DllStructSetData($tBitmap, "RefCnt", 1)
    	Local $oBitmap = ObjCreateInterface(DllStructGetPtr($tBmp), $_sGDIPEX_IIDBMP, $_tagGDIPEX_BITMAP)
    	If Not IsObj($oBitmap) Then
    		_GDIPlus_GraphicsDispose($hGfx)
    		_GDIPlus_BitmapDispose($hBmp)
    		Return SetError($GDIP_ERRABORTED, 3, False)
    	EndIf
    	Return $oBitmap
    EndFunc   ;==>__GDIPlusEx_BitmapCreateObject
    
    
    Func __GDIPlusEx_BitmapDispose(ByRef $tBitmap)
    	If Not IsDllStruct($tBitmap) Then Return SetError($GDIP_ERRINVALIDPARAMETER, 1, False)
    	DllCall("kernel32.dll", "ptr", "GlobalFree", "struct*", DllStructGetData($tBitmap, "pScan0ORIG"))
    	DllCall("kernel32.dll", "ptr", "GlobalFree", "struct*", DllStructGetPtr($tBitmap))
    	$tBitmap = 0
    	Return True
    EndFunc   ;==>__GDIPlusEx_BitmapDispose
    
    
    Func __GDIPlusEx_BitmapWarpCreateBitmap($oBitmap, $fX1, $fY1, $fX2, $fY2, $fX3, $fY3, $fX4, $fY4, $bInterpol, ByRef $iX, ByRef $iY)
    	If Not IsObj($oBitmap) Then Return SetError($GDIP_ERRINVALIDPARAMETER, 1, False)
    	Local $tMatrix = DllStructCreate("float WF[8]; float Tmp[72]; int DstX; int DstY; uint DstW; uint DstH; float SrcW; float SrcH;")
    	Local $tWarpPnts = DllStructCreate("float[8];")
    	DllStructSetData($tWarpPnts, 1, $fX1, 1)
    	DllStructSetData($tWarpPnts, 1, $fY1, 2)
    	DllStructSetData($tWarpPnts, 1, $fX2, 3)
    	DllStructSetData($tWarpPnts, 1, $fY2, 4)
    	DllStructSetData($tWarpPnts, 1, $fX3, 5)
    	DllStructSetData($tWarpPnts, 1, $fY3, 6)
    	DllStructSetData($tWarpPnts, 1, $fX4, 7)
    	DllStructSetData($tWarpPnts, 1, $fY4, 8)
    	DllCallAddress("none", $_pGDIPEX_ASM_WARPMXPREP, "struct*", $tMatrix, "struct*", __GDIPlusEx_ObjGetPtr($oBitmap), "struct*", $tWarpPnts, "bool", $bInterpol)
    	Local $iDstW = DllStructGetData($tMatrix, "DstW")
    	Local $iDstH = DllStructGetData($tMatrix, "DstH")
    	If $iDstW < 1 Or $iDstH < 1 Then Return SetError($GDIP_ERRABORTED, 2, False)
    	If Mod($iDstW, 4) Then
    		$iDstW += 4 - Mod($iDstW, 4)
    		DllStructSetData($tMatrix, "DstW", $iDstW)
    	EndIf
    	Local $aResult = DllCallAddress("int", $_pGDIPEX_ASM_WARPMXSLVE, "struct*", $tMatrix)
    	If @error Or $aResult[0] <> 0 Then Return SetError(10, $GDIP_ERRABORTED, False)
    	Local $tWarp = __GDIPlusEx_BitmapCreate($iDstW, $iDstH)
    	$iX = DllStructGetData($tMatrix, "DstX")
    	$iY = DllStructGetData($tMatrix, "DstY")
    	Local $tVal = DllStructCreate("byte Val[356]; byte Pad[16];")
    	Local $pVal = Number(DllStructGetPtr($tVal))
    	$pVal += 16 - Mod($pVal, 16)
    	Local $tValues = DllStructCreate("float WF1[4]; float WF2[4]; float WF3[4]; float WF4[4]; float WF5[4]; float WF6[4]; float WF7[4]; float WF8[4]; float One[4]; float XOff[4]; float SrcW[4]; float SrcH[4]; float SrcS[4]; float TmpX[4]; float TmpX1[4]; float TmpX2[4]; float Idx[4]; float fX[4]; float fY[4]; uint Msk[4]; uint DstW; uint DstH; uint DstStride; uint SrcStride; ptr Dst; ptr Src;", $pVal)
    	DllCallAddress("none", $_pGDIPEX_ASM_WARPVAL, "struct*", $pVal, "struct*", $tMatrix, "uint", $oBitmap.Stride, "uint", $iDstW * 4)
    	DllStructSetData($tValues, "Dst", DllStructGetData($tWarp, "pScan0"))
    	DllStructSetData($tValues, "Src", $oBitmap.Scan0)
    	Switch $bInterpol
    		Case True
    			DllCallAddress("none", $_pGDIPEX_ASM_WARPIP, "struct*", $pVal)
    		Case Else
    			DllCallAddress("none", $_pGDIPEX_ASM_WARP, "struct*", $pVal)
    	EndSwitch
    	Return $tWarp
    EndFunc   ;==>__GDIPlusEx_BitmapWarpCreateBitmap
    
    
    Func __GDIPlusEx_ObjGetPtr($oObj)
    	If Not IsObj($oObj) Then Return SetError($GDIP_ERRINVALIDPARAMETER, 1, 0)
    	Local $pPtr
    	$oObj.QueryInterface("", $pPtr)
    	$oObj.Release
    	Return $pPtr
    EndFunc   ;==>__GDIPlusEx_ObjGetPtr
    
    
    Func __GDIPlusEx_OnExit()
    	If Not IsArray($_aGDIPEX_ASMSTRUCT) Or UBound($_aGDIPEX_ASMSTRUCT) < 1 Or UBound($_aGDIPEX_ASMSTRUCT, 0) <> 1 Then Return
    	If $_aGDIPEX_ASMSTRUCT[0] >= UBound($_aGDIPEX_ASMSTRUCT) Then $_aGDIPEX_ASMSTRUCT[0] = UBound($_aGDIPEX_ASMSTRUCT) - 1
    	For $i = 1 To $_aGDIPEX_ASMSTRUCT[0]
    		DllCall("kernel32.dll", "bool", "VirtualFree", "ptr", $_aGDIPEX_ASMSTRUCT[$i], "ulong_ptr", 0, "dword", 0x00008000)
    	Next
    	_GDIPlus_Shutdown()
    EndFunc   ;==>__GDIPlusEx_OnExit
    Alles anzeigen
  • GDI+ Wave

    • UEZ
    • 18. Dezember 2015 um 20:40
    Zitat von Alina

    Hast Du suuuuuper gemacht.
    Aber durchblicken tue ich mein dem Script nun gar nicht. ;)

    interessant sind die Zeilen 86 - 143.

    Idee:

    • baue ein 3D Array auf, um die 32x32 Pixels abzuspeichern (an der x/y Position die x, y und die Farbwerte des Bildes speichern)
    • berechne die Farbe des Pixel, die x und y Koordinate
    • zeichne die neu berechneten Pixel mit Rechtecken

    Jedes Pixel läuft auf einer Kreisbahn, wobei die Phase der Sin/Cos Kurve verschoben ist, so dass dieser Welleneffekt entsteht.

    Ich werde noch ein Gitter aufspannen und die Verzerrungen der einzelnen Bildfragmente via Trapezoids darstellen. Mal sehen, wie das aussehen wird...

  • GDI+ Wave

    • UEZ
    • 18. Dezember 2015 um 15:09

    Ich habe lange schon nicht mehr zu GDI+ gepostet. Hier eine kleine Spielerei zu Wellensimulation (sieht schick aus :) ) .

    Mit diesen Einstellungen läuft's bei mir mit ca. 15-17 FPS :whistling: .

    Wave v1.2.1
    Wave v1.2.1.jpg

    Wave v1.3.1
    Wave v1.3.1.jpg

    Wave v1.3.2 (extrem langsam!)
    Wave v1.3.2.jpg


    Damit's es schneller läuft, aber die Auflösung wird dadurch kleiner, die Werte für

    Code
    $iDots_X = 32, $iDots_Y = 32

    in der entsprechende Zeile ändern. Je größer desto langsamer.


    Danke an Eukalyptus für GDIPlusEx Funktionen (you rock man) :rock:

    Dateien

    Wave v1.2.1.au3 63,29 kB – 424 Downloads Wave v1.3.2.au3 81,53 kB – 461 Downloads Wave v1.3.1.au3 80,88 kB – 435 Downloads
  • GDI Plus Overlay: Bilder werden zu groß angezeigt

    • UEZ
    • 4. Dezember 2015 um 18:55

    Probiere es mal mit

    Code
    _GDIPlus_GraphicsDrawImageRect($GUI_hGraphics, $hImage, $x, $y, _GDIPlus_ImageGetWidth($hImage), _GDIPlus_ImageGetHeight($hImage))

    anstelle von _GDIPlus_GraphicsDrawImage()

  • GDIPlus Grafiken verschwinden wenn Fenster minimiert wird.

    • UEZ
    • 3. Dezember 2015 um 12:08

    Du musst die Grafik neuzeichnen, wenn das Fenster "gelöscht" wurde.

    Suche nach GDIPlus und WM_PAINT.

    GDIPlus verschwindet

  • Autoit - Gleitkommazahlen abrunden

    • UEZ
    • 2. Dezember 2015 um 09:06
    Code
    Row|Col 0
    [0]|7.29002089671113
    [1]|7.12605355962542
    [2]|7.41605803455963
    [3]|14.5377516124132
    [4]|Nummern: 10000
    [5]|Durchläufe: 100
    
    
    
    
    CPU: Intel(R) Core(TM) i5-4300U CPU @ 1.90GHz / 8 GB Speicher (PC3-12800 (800 MHz))
    Alles anzeigen
  • Happy Birthday BugFix

    • UEZ
    • 28. November 2015 um 20:13

    Euch beiden (BugFix & Der_Doc) alles Gute und feiert schön. :theke:

  • Happy Birthday, Raupi!

    • UEZ
    • 26. November 2015 um 23:00

    Herzlichen Glückwunsch zum Geburtstag und alles Gute für die Zukunft.

  • _WinAPI_SystemParametersInfo (Abfrage Mousespeed) immer mit Fehler

    • UEZ
    • 24. November 2015 um 15:53

    Mein Ergebnis:

    Code
    998
    var: $iMouseSpeed -->
  • [Gelöst] Excel / Outlook Event Hilfe in VBA

    • UEZ
    • 20. November 2015 um 10:23

    So geht's:

    Module1 in Excel erstellen:

    Code
    Option Explicit
    Dim ItmEvt As New Class1
    Public Sub Mail()
            Dim outApp As Object
            Dim outMail As Object
            Set outApp = CreateObject("Outlook.Application")
            Set outMail = outApp.CreateItem(0)
            Set ItmEvt.Itm = outMail
            On Error Resume Next
            With outMail
                .To = ""
                .CC = ""
                .BCC = ""
                .Subject = "VBA Test"
                .BodyFormat = olFormatHTML
                .HTMLBody = "Blah Blah Blah"
                .Display
            End With
            On Error GoTo 0
            Set outMail = Nothing
            Set outApp = Nothing
    End Sub
    Alles anzeigen

    Class1 erstellen:

    Code
    Option Explicit
    
    
    Public WithEvents itm As Outlook.MailItem
    
    
    Private Sub itm_Close(Cancel As Boolean)
    
    
        Dim blnSent As Boolean
        On Error Resume Next
        blnSent = itm.Sent
        If Err.Number = 0 Then
            MsgBox "Email not sent"
        Else
            MsgBox "Email sent"
        End If
    End Sub
    Alles anzeigen

    Wichtig: Tools->References muss "Microsoft Outlook 15.0 Object Library" selektiert sein (oder die entsprechende Version)!

  • [Gelöst] Excel / Outlook Event Hilfe in VBA

    • UEZ
    • 17. November 2015 um 10:40

    Es geht darum, wenn der VBA Code gestartet wird, wird ein Outlook Fenster gestartet (neue Mail). Ich will nun prüfen, ob die Mail nun versandt wurde oder nicht. D.h. wurde der "Senden" Knopf gedrückt oder nicht. Dem entsprechend soll dann eine Zeile in Excel gefärbt oder nicht gefärbt werden.

    Das geht mit Event, aber ich bekomme das nicht aus Excel heraus nicht hin. Die Beispiele aus dem Internet funzen irgendwie nicht richtig. Um das Problem darzustellen muss das Office Paket installiert sein.

  • [Gelöst] Excel / Outlook Event Hilfe in VBA

    • UEZ
    • 15. November 2015 um 21:42

    Irgendwie kriege ich es nicht gebacken aus Excel Outlook Events abzufragen.

    Beispiel in Excel VBA:

    Code
    Public Sub Mail()
            Dim outApp As Object
            Dim outMail As Object
            Set outApp = CreateObject("Outlook.Application")
            Set outMail = outApp.CreateItem(0)
            On Error Resume Next
            With outMail
                .To = ""
                .CC = ""
                .BCC = ""
                .Subject = "VBA Test"
                .BodyFormat = olFormatHTML
                .HTMLBody = "Blah Blah Blah"
                .Display True
            End With
            On Error GoTo 0
            Set outMail = Nothing
            Set outApp = Nothing
    End Sub
    Alles anzeigen

    Wie kann ich jetzt abfragen, ob der "Send" Button gedrückt wurde?

    Irgendwie finde ich nichts, was in Excel läuft.

    Hat jemand eine Idee?


    Ich benutze Office 2013.

    Danke.

  • Times Table, Mandelbrot und Symmetrie

    • UEZ
    • 7. November 2015 um 18:42

    Mit Kantenglättung sieht es besser aus und ein Mod für eine Animation würde die Times Table besser zur Geltung bringen:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
  • Echtes Fullscreen?

    • UEZ
    • 6. November 2015 um 11:58

    Wenn mehrer Apps den Flag Topmost haben, wer gewinnt?

    Es gewinnt der, der auf der Z-Order oben steht, welches sich jederzeit ändern kann.

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™