Beiträge von UEZ
-
-
Eventuell hilft dir http://gparted.org, deine Partitionen zu bearbeiten. Notfalls kann du mit der Windows DVD den Bootsektor neu erstellen.
-
Mit Sleep(0) sind es:
1920 x 1200 = 36 FPS
1024 x 768 = 50 FPSAha, jetzt passt's eher.

Ich muss dazu sagen, dass ich auch einen Desktop PC nutze..
Die 23 FPS habe ich hier bei einer Auflösung von 1920x1080.Um so schlimmer, dass dein i3 bei höherer Auflösung schneller ist.

Wenn Du vor dem Aufruf der GUI noch eine GUI (ganz schwarz) in den Hintergrund setzt, dann sieht das noch besser aus, weil man nicht irgendeinen Desktopkram halbtransparent sieht.
Also so:Mir persönlich gefällt es mit der durchsichtigen GUI besser.

Du musst aber keine zweite GUI erstellen, sondern nur WinSetTrans abschalten und $hBrush_Txt neusetzen, z.B. den Pinsel auf 0x10303030 setzen.
-
Ich musste gerade feststellen, dass die Framerate ja auch auflösungsabhängig ist.
Also mein Wert (27 FPS) bezieht sich auf eine Desktop-Auflösung von 1920 x 1200 Pixel.
Bei z.B. 1024 x 768 Pixel schafft mein Rechner 34 FPS.Danke Oscar, natürlich müssen wir die Auflösung mit einkalkulieren, sonst sind die Vergleiche nicht richtig.

Meine 19 FPS werden bei einer Auflösung von 1600x900 Pixel erreicht.
UEZ: 1600 * 900 * 19 = 27360000
Oscar: 1920 * 1200 * 27 = 62208000@Oscar: kannst du bitte nochmals mit 1024x768 testen und Sleep(0) setzen? 34 FPS scheinen mir ein bissl wenig.
-
Bei mir läuft es mit knapp 23 FPS. Ich habe einen Core i3-4130.
Krass, dein i3 ist schneller als mein i5.
Durchschnitt jetzt auf 18 fps, incl. Sound.
Das aber nur, wenn "von Hand" auf volle Leistung gestellt wird. Ist der Energiesparmodus eingestellt, fällt der Takt von 2,3 auf 0,7 Ghz und die fps dann entsprechend.
GDI ist keine Anwendung, um einen modernen Prozessor aus dem Tiefschlaf zu holen...Im Akkubetrieb läuft das Skript aus meinem Notebook so etwa mit 10 FPS. In den Energieinstellungen kann man das ändern und der CPU max. Power geben, wenn man will.
-
Wow, ja so gehts aber jetzt wählt er den $button3 als button2, also immer 1 links 2 rechts usw. kann man das noch anpassen oder muss ich die Button variablen umbenennen am besten ?
Wie meinst du das?
-
Sowas hier?
AutoIt
Alles anzeigen#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListBox.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <Clipboard.au3> #include <SendMessage.au3> #include <GuiListView.au3> #include <ListViewConstants.au3> #include <StructureConstants.au3> #include <GuiEdit.au3> #Include <WinAPI.au3> #include <ScrollBarsConstants.au3> #include <SliderConstants.au3> Global $NSound = 1 $Form1 = GUICreate("Sounds", 442, 453, -1, -1) $Group1 = GUICtrlCreateGroup("", 4, 4, 265, 443) Global $aCtrl[30][3] For $i = 0 To UBound($aCtrl) - 1 Step 2 $aCtrl[$i][0] = GUICtrlCreateButton("Sound Wählen", 8, 22 + $i * 14, 125, 25) $aCtrl[$i][1] = GUICtrlCreateContextMenu($aCtrl[$i][0]) $aCtrl[$i][2] = GUICtrlCreateMenuitem("Sound " & $i + 1 & " wählen", $aCtrl[$i][1]) $aCtrl[$i + 1][0] = GUICtrlCreateButton("Sound Wählen", 135, 22 + $i * 14, 125, 25) $aCtrl[$i + 1][1] = GUICtrlCreateContextMenu($aCtrl[$i + 1][0]) $aCtrl[$i + 1][2] = GUICtrlCreateMenuitem("Sound " & $i + 2 & " wählen", $aCtrl[$i + 1][1]) Next $Group2 = GUICtrlCreateGroup("", 270, 116, 167, 135) $Slider1 = GUICtrlCreateSlider(280, 132, 150, 35) $Label1 = GUICtrlCreateLabel("Volume : ", 316, 171, 48, 17) $Label2 = GUICtrlCreateLabel("100 %", 365, 171, 33, 17) $Button31 = GUICtrlCreateButton("How To", 316, 188, 75, 25) $Checkbox1 = GUICtrlCreateCheckbox("Sound", 302, 224, 97, 17) GUICtrlSetState ( $Checkbox1, $GUI_CHECKED) $Button32 = GUICtrlCreateButton("Open Youtube", 276, 252, 159, 25) GUISetState(@SW_SHOW, $Form1) #Region $FormCSB1 = GUICreate(" ", 191, 81, -1, -1) $LabelCSB1 = GUICtrlCreateLabel("Sound von Button 1", 46, 4, 99, 17) $InputCSB1 = GUICtrlCreateInput("Bitte MP3 auswählen", 2, 26, 147, 21) $ButtonSoundCSB1 = GUICtrlCreateButton("...", 152, 24, 31, 25) $ButtonCSB1 = GUICtrlCreateButton("Bestätigen", 58, 54, 75, 25) GUISetState(@SW_HIDE, $FormCSB1) #EndRegion While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button32 _Youtube () Case $Checkbox1 If _IsChecked($Checkbox1) Then ;checked Else ;not EndIf EndSwitch If $nMsg <> 0 Then $iPos = _ArraySearch($aCtrl, $nMsg, 0, 0, 0, 0, 1, 2) If $iPos > -1 Then MsgBox(0, "Test", "Sound " & $iPos + 1 & " wurde ausgewählt") EndIf EndIf WEnd Func _Test () MsgBox(0,"","") ;GUISetState(@SW_Show, $FormCSB1) EndFunc Func _Youtube () ShellExecute("http://www.youtube.de") EndFunc Func _IsChecked($idControlID) Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED EndFunc -
In eine MsgBox nicht, du müsstest die MsgBox als GUI nachbauen.
-
Vielen Dank für die Rückmeldungen.
Dieses "von...bis" hat mir nicht gefallen, also habe ich noch ein durchschnittliche FPS Kalkulation eingebaut.
Auf meinem Notebook pendelt sich die FPS auf ca. 19 FPS ein.
-
Sieht gut aus!

Bei mir läuft es mit 25 - 33 FPS (Intel Core i5-4690 @ 3.50 GHz).
Müsste ja richtig "geschmeidig" bei dir laufen...

Unter 15 FPS macht's leider keinen Spaß zuzuschauen.
-
Danke euch beiden für euer Feedback.

Mit wie vielen FPS läuft das Skript bei euch? Welche CPU?
-
-
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
Alles anzeigen;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 -
Sehr elegant gelöst.

-


Also doch ein Integer Problem.

-
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
Alles anzeigen#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_OnExitIst die Vorgänger Version.
Ich vermute, dass eher in _GDIPlusEx_BitmapWarp() irgendwo Integer benutzt wird und es dadurch zu diesen Darstellungsproblemen kommt.
-
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?
-
Hast du eine Idee, wie ich die grauen Linien, die im Bild vorkommen, wenn die Quadranten nicht richtig zueinander liegen, weg bekomme?
AutoIt
Alles anzeigen#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 &= '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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 &= 'N+arNngVPI4ePbt2A1rWPNWto8UVjQtuaGjaN7Y4tTjY4XIrMdulYCZlJPmk9CcMQjm8JDaxTLpBJplj5mKtmP0L058jcuXmrrPRE49rSbdjuLG+jgyZEuCyJOUPIO92RmtMozCJuF2Nsg4S8DUiWd3Dm8vXLaWN0jk1Ysn5JYMLpRaRcSLYqaE+RriieiKQZyNe0KRhWsTXyN61SFt2OCxS82a8LmQ8jfi5Gs2UypUbF5yElZbfwnV3b4GlM45keZLLZZBBfWR0w4mKpjn+CyxZ7sYIEKTMENlJl/1m5TsKuqIUeQ1AnBE4pFGuPZVfAkXd00LJALJjciChYoiB5ddumPspwOW6JFVE7IC6HZ/5FKsjyTQO3K2NUgYQc3KQ24JkfFH/AAQzJaazNLIbyR5u+hCUy8JZZJ411y49BF0s9x1HgmjUjUexJn4FbFL1bIkjyY25FRS2d2RmlJWdgrqnDFd5GPSnkSBk8lpYGRtF73G+S0YnBtp7ckszFsQXMyXu282HElnnA4bTErWE8DcMkkl/R+HRRYGiCedJlk6EoTC9BBXQ80ap5IqpWBplZ34pNWLA/wDV7AlZu+h2cDYkRBoRLQ7qad3Y7bU2Buw9Oh8yJnC/wJSukuXJEnOGtbRyRH5dy3BLQ3slk1TiidhNsy5YriXKFyzHIXCFTXVO3/oHl2qIdE4LeCIqu40YJmio0uxjTWfrFK+jFkTRk8GaG0sF6RJKYgld7GbS6rRDVh9LpF8oVwrplsF8kXDzIbvC3xgmrQ57ocVnYbnZE5wQ+DNFW5It2P8A3IV3/wBLPB0Xo2JsopHaYhXR5C5FkfQmRxWS7A0Jko0Raq74+qSUkO4mc0wMFwW7GwwM6JIORBpVl0IvDY+pvY2hCTcIgPOiDuiQMtZwiN0sl/noQy54HBPxQ2Z+gyZy8IS13fsZkGqiseBPyzBJrgfShNPsxpqicpLMaMEjTpJbIbL6aTODxaqaV9jbE+RtHcasrI3SBbOxZ/8AQ3PShXG89h9bm7C+AuZoKIEYbrb6FvyJw/8AghjS3L9FmLuxIVxfI7G0/IknhCXsZrwa61oxrivlCjxl0WkcKIaPH0aTeBIu48kk1MEwT8OhNgNruY23nryLV8D9E1xOOAxXJS7jeXcdhNGyaNxb0dVeF4ciUN0pwNabjMtk2LhvwsP0E4Im6MVaslsYiWrMy+K5VxsvoFG4dliTuyZskJclkHx6EzG+8Gv0Vmk2vSmTBgSLoS9ZriLSTXCJp2McDVhXeCSURR+inBcI+VXAmiHgYHQqJ2GrxYaaz6jBCS2eSSabJ4Jrks4D0Ibb9SKRY3pz0TUvWiXYadGr0rouTlYtwab4TIMwdyzluz9RNot2Mkuj8iRHDJezGKTNjh9JFP4JJ6ofBZm4+Kj6BuU+h168sLZZ4C2h5TxSiMp9ZOsMvykQnkXVZJlVTJGl5DZdcxRJbktyWpJJL9j19Av+Boi/YWTPZuEJzsljt9BPz5JXg8NPqkkn8D2T9u2PNdC9ZJZwYItMZFa7oaSjQi8NxGRufJgSLPpJJJJ7InsiSfb9jzXRn1k7Ct3aLpUNgsM/0CmUJK042NzHb7J2PPRt66Waf8DC83Al0skxykxH2IEgfId2/snZn6NfiL8oCL+EZtJ4RipPaGVxvt9lbGofQvXTwl5JSU2nBGUZfI5E8DTst+Bo+ym7jcvo16qGS7NE2jmjWdlH2ZDkefon9oS58jt9Ch/aLu+heqh/aO6uiCsZfcWokl4es/tRJVEO/t6ad58DUVaBjft7OwvP3GajSx9xv7jYvd//2gAMAwEAAgADAAAAEMGLLFJMMHJEHNCENHFPBMBCoMPkmPCNPNIGGBALHPEACDHMNGMGJKAIMPFPDPIIHEDKFNFAokgohiLGDGAGCNLBKBKKHLJDBDFPABCLNEPPIAELGAKKAnDAKJrrCAErMELHMBIFBMGEEAEIPHHFLHMFBMKOMHDFAPKIIPINPLLO' $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 &= 'Aj1smkftUcUd+oUo2eoWFNeSo4s/+RfESOde5mED44iI0lP+E7hczLS/aJ2zFZuWvUtcftFcsAkrboyxOU+Jlbckcz/2JXAxVrxLYPm4jtq+9m3EVnkS/wBRI29uZvs47LR8fvFCm38SwsN/aLIYtmmMFTWS2XaCm4lWW3cszzCjBVxuIAL2B2UR0niO5eeSr5Of6nI6AMVMcNmmDWu13f7wyRoitbq4TQbCf7fv9E/w8RF1zEVSVKrmDWlEjQKwhaTD4c1Lym/iFxFOSNWH5TN7SGGruIUH0PJMxs8n1wvUoH4JoYHgjVzKoMA/llrUBi/KBmtrxGCkF/lit2woi3NRQeVqIY/omDWjwa+i6HzHb5JCr+X0bqAy0n7wXLi4uOTefDLN+5VFuItBXHRHRKrNxMyoEroyuvDcKjFDceeZWBIt2aKz++IhiAW8teJX2XKs3MQBXAY8P7SuEp8RZ+iisaZUgPucRYWfYg3EzdwtEJXsfmYar9O45rNwssFxLYJdXn7QtH5mRQvDqO0K+opjB5ZgsuSlklBjvJ+YI2VWIMCiKXxPV5i53G1j8TCKp45gjP8ALNo/b6lEtG4KBkuzsI9QuVMTCmMxW4NE+GpTHx0VT5lSsypxE8dKuVXUm2CoFsEgZhh/7xC3htl7GBV4q7CFGZc3tAV1LHzErT6jt7K79IwdnyeYi0vxLebqLCzNzjf5RRsxfF3Hnk4iBUvJWOmF1fiYLFkpy7PHP0d4JU3+EccH2TJjw/efE3MHm4feGvMQBw9uIchXg1LNHw3Fvf1hzMx2FdDo9HoSuiRbDs48TBh+8MHQZzH6BCWK2lf3GKxZoeWY+wrUsL5GDzMyII2Z+I/OBs1Ud9l/R3ZXiah3swxzLfVUxAyJCnhnuoUKuLosfmD9prMs9JBDZC7ceRGc6894lZue0zl+Q+0vzfiXwX8Sz3KeLl/Ezbr4iq2qvv8AwSK1D6aUx30qMhcJfTicdTc32cQ1FKSnpLEwUugYlw15xFQ2z9i5XgFbXCpbDgxj/sFqle+m5p+ncBKWnjKWN5+GSPn9kicwEWM3LzifKC1qUpHMFX3A/oRNS77GHUjFvIIOi8StoCrWHP0zpj1o2vgg2CwwfBM7Angf6mTbBcfH/v2jJwgYPj/saXlOdayy8CfwH/iAolOFO4j9S4I5lpto6SsviEvFX/L46Z7zsvMvPZycxOBggzjAi1SF4Tjt46cduCIIvDuXJbah5lC23Ar8MYlUWkWreX4jDcxWDqjH8RIG7KcUHmAeJYvPxN8Uivnu4/UjvetR7ebmfylri2xhHUQCecENdb7npzHpU+lov7P9xG/2P3VSyiq7vipVGshUe+tftvMo1dIaNeIxQUXg68yulSv1E/wDZMX5L4i2Wq6uoDxHqdHtcPTknECtrDa+ajalUbXgxLVk2uuIxlGrPxHRan0EIYnFB2ys9hPPTfR/Sz6Z9JKOImXrxFQx7npc1MeYlQyx1FtQM6DDjzBOPn5TA7CLv/yo+O2mviAAIh2VbkitfImoR63OOizMf06r7dfVFvX/ACJY9bcwMnxHpfV6VB7OWJ4SpFyRqCFbCtOipVVH4fRvMenPWv0s7K689Oe2+yj48+I88311DXZUI9OO019Z9pfZiX+lXjsJx2V2vZzG6X4PuC2ewpxzfYsep1en9u9X/wCEvtuNW21FqwE11BWfP0B7nh0qBKnEvrePoHv9ReuoZ+hXRymI0KvHURtZubys7SVElSuhGEd9bl/SzCPefoR/gPbXS2jHxDqaWE6tqHR0FVd9DqEfM323BzOH0uOpHtf1I7zqzSU5hrrkZLdkspZzeTtWHY9jqB9E/Xjv0SlWhzQT83LGGy6nHRQco3FMgX4eldg9l9hklV3EZU476/U7+hfVjrWDhX/MWars5rqdrMvbUenPZX0eP1I+qRqgW45d9Gcw39HXZz0vufoPXiX+qH0dIQjDMaL7dfSeziH0iMf1Y70rsGG5XVZz' $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 -
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...
-
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
.Wave v1.2.1
Wave v1.2.1.jpgWave v1.3.1
Wave v1.3.1.jpgWave v1.3.2 (extrem langsam!)
Wave v1.3.2.jpgDamit's es schneller läuft, aber die Auflösung wird dadurch kleiner, die Werte für
in der entsprechende Zeile ändern. Je größer desto langsamer.
Danke an Eukalyptus für GDIPlusEx Funktionen (you rock man)
