Ein kleines Beispiel wie eine "tanzende" XOR Textur aussieht
Zauberei
#include <GDIPlus.au3>
Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]Global $iSize = 32
[/autoit] [autoit][/autoit] [autoit]Global $hGUI, $hGFX, $hBMP, $hBUF, $hBRU, $iFrame, $iTimer = TimerInit(), $iFPS, $iFrameTimer = TimerInit(), $iCount = 0
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate('XOR Textur', 562, 562)
$hGFX = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBMP = _GDIPlus_BitmapCreateFromGraphics(562, 562, $hGFX)
$hBUF = _GDIPlus_ImageGetGraphicsContext($hBMP)
$hBRU = _GDIPlus_BrushCreateSolid()
GUISetOnEvent(-3, '_Exit', $hGUI)
GUIRegisterMsg(0xF, 'WM_PAINT')
GUISetState(@SW_SHOW, $hGUI)
While Sleep(10)
_XOR_Tex()
WEnd
Func _XOR_Tex()
Local $iCol, $iTMP
Local Static $iSin = 0, $iMulti = 256 / $iSize, $2Multi = 2 * $iMulti
$iSin += 5 / (1000 / TimerDiff($iFrameTimer))
$iFrameTimer = TimerInit()
_GDIPlus_GraphicsClear($hBUF, 0xFF808080)
For $x = 0 To $iSize - 1 Step 1
$iTMP = 2 * $x * $iMulti
For $y = 0 To $iSize - 1 Step 1
$iCol = Hex(Int(BitXOR($x, $y) * $iMulti), 2)
DllCall($ghGDIPDll, "int", "GdipSetSolidFillColor", "handle", $hBRU, "dword", '0xFF' & $iCol & $iCol & $iCol)
DllCall($ghGDIPDll, "int", "GdipFillRectangleI", "handle", $hBUF, "handle", $hBRU, "int", 25 + 15 * Sin($y * $iMulti / 64 + $iSin) + $iTMP, "int", 15 * Cos($x * $iMulti / 64 + $iSin) + 25 + $y * $2Multi, "int", $2Multi, "int", $2Multi)
Next
Next
$iFPS += 1
If TimerDiff($iTimer) > 1000 Then
$iTimer = TimerInit()
WinSetTitle($hGUI, '', 'XOR Textur (' & $iFPS & 'FPS - ' & $iSize & 'x' & $iSize & ')')
$xFPS = $iFPS
$iFPS = 0
$iCount += 1
If $iCount = 10 Then
Do
$iTMP = 2 ^ Random(4, 6, 1)
Until $iTMP <> $iSize
$iSize = $iTMP
$iMulti = 256 / $iSize
$2Multi = 2 * $iMulti
$iCount = 0
EndIf
EndIf
WM_PAINT()
EndFunc ;==>_XOR_Tex
Func WM_PAINT()
_GDIPlus_GraphicsDrawImage($hGFX, $hBMP, 0, 0)
EndFunc ;==>WM_PAINT
Func _Exit()
_GDIPlus_GraphicsDispose($hBUF)
_GDIPlus_BitmapDispose($hBMP)
_GDIPlus_GraphicsDispose($hGFX)
_GDIPlus_BrushDispose($hBRU)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_Exit
lg
Mars