Eine kleine Spielerei
Spoiler anzeigen
#include <GDIP.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
HotKeySet("{ESC}", "_EXIT")
[/autoit] [autoit][/autoit] [autoit]$sFile = FileOpenDialog("Öffnen", "", "(*.jpg;*.bmp;*.png;*.tif)")
If @error Or Not $sFile Or Not FileExists($sFile) Then Exit
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($sFile)
If @error Or Not $hImage Then Exit
$iWidth = _GDIPlus_ImageGetWidth($hImage)
$iHeight = _GDIPlus_ImageGetHeight($hImage)
_ResizeImage($hImage, $iWidth, $iHeight, @DesktopWidth * 0.7, @DesktopHeight * 0.7)
[/autoit] [autoit][/autoit] [autoit]$hGui = GUICreate("Test", $iWidth, $iHeight, Default, Default, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_LAYERED, $WS_EX_TRANSPARENT))
GUISetState()
$hPath = _CreateSpiralPath($iWidth, $iHeight, 2, 1.06, 0.05)
$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixTranslate($hMatrix, $iWidth / 2, $iHeight / 2)
_GDIPlus_MatrixRotate($hMatrix, -12)
_GDIPlus_MatrixTranslate($hMatrix, -$iWidth / 2, -$iHeight / 2)
While 1
_DrawImage($hGui, $hImage, $hPath, $hMatrix, $iWidth, $iHeight)
Sleep(10)
WEnd
Func _ResizeImage(ByRef $hImage, ByRef $iWidth, ByRef $iHeight, $iNewWidth, $iNewHeight)
Local $fScaleX = $iNewWidth / $iWidth
Local $fScaleY = $iNewHeight / $iHeight
If $fScaleY < $fScaleX Then $fScaleX = $fScaleY
$iWidth *= $fScaleX
$iHeight *= $fScaleX
Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)
Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsDrawImageRect($hContext, $hImage, 0, 0, $iWidth, $iHeight)
_GDIPlus_GraphicsDispose($hContext)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_BitmapDispose($hImage)
$hImage = $hBitmap
EndFunc ;==>_ResizeImage
Func _DrawImage($hWnd, $hImage, $hPath, $hMatrix, $iW, $iH)
Local $tSize = DllStructCreate("long X;long Y")
DllStructSetData($tSize, "X", $iW)
DllStructSetData($tSize, "Y", $iH)
Local $tSource = DllStructCreate("long X;long Y")
Local $tBlendI = DllStructCreate("byte Op;byte Flags;byte Alpha;byte Format")
DllStructSetData($tBlendI, "Alpha", 0xFF)
DllStructSetData($tBlendI, "Format", 1)
Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGraphics)
Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_PathTransform($hPath, $hMatrix)
Local $hRegion = _GDIPlus_RegionCreateFromPath($hPath)
_GDIPlus_GraphicsSetClipRegion($hContext, $hRegion)
_GDIPlus_RegionDispose($hRegion)
_GDIPlus_GraphicsDrawImage($hContext, $hImage, 0, 0)
[/autoit] [autoit][/autoit] [autoit]Local $hPen = _GDIPlus_PenCreate(0xFF000000, 3)
_GDIPlus_GraphicsDrawPath($hContext, $hPath, $hPen)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hContext)
_GDIPlus_GraphicsDispose($hGraphics)
Local $hDCD = _WinAPI_GetDC($hWnd)
Local $hDCS = _WinAPI_CreateCompatibleDC($hDCD)
Local $hBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
_GDIPlus_BitmapDispose($hBitmap)
Local $hOrig = _WinAPI_SelectObject($hDCS, $hBmp)
_WinAPI_UpdateLayeredWindow($hWnd, $hDCD, 0, DllStructGetPtr($tSize), $hDCS, DllStructGetPtr($tSource), 0, DllStructGetPtr($tBlendI), 2)
[/autoit] [autoit][/autoit] [autoit]_WinAPI_SelectObject($hDCS, $hOrig)
_WinAPI_DeleteObject($hBmp)
_WinAPI_DeleteDC($hDCS)
_WinAPI_ReleaseDC($hWnd, $hDCD)
EndFunc ;==>_DrawImage
Func _CreateSpiralPath($iW, $iH, $fSqr = 2, $fMul = 1.1, $fStep = 0.03)
Local $hPath = _GDIPlus_PathCreate(0)
Local $iCnt = 0, $iW2 = $iW / 2, $iH2 = $iH / 2
Local $iX, $iY, $iXOld = $iW2, $iYOld = $iH2
Do
$iX = Cos($iCnt) * $iCnt ^ $fSqr + $iW2
$iY = Sin($iCnt) * $iCnt ^ $fSqr + $iH2
_GDIPlus_PathAddLine($hPath, $iXOld, $iYOld, $iX, $iY)
$iXOld = $iX
$iYOld = $iY
$iCnt += $fStep
Until ($iX < 0 Or $iX > $iW) And ($iY < 0 Or $iY > $iH)
_GDIPlus_PathReverse($hPath)
$iXOld = $iW2
$iYOld = $iH2
$fSqr *= $fMul
For $i = 0 To $iCnt Step $fStep
$iX = Cos($i) * $i ^ $fSqr + $iW2
$iY = Sin($i) * $i ^ $fSqr + $iH2
_GDIPlus_PathAddLine($hPath, $iXOld, $iYOld, $iX, $iY)
$iXOld = $iX
$iYOld = $iY
Next
_GDIPlus_PathCloseFigures($hPath)
_GDIPlus_PathFlatten($hPath)
Return $hPath
EndFunc ;==>_CreateSpiralPath
Func _EXIT()
_GDIPlus_BitmapDispose($hImage)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_EXIT
benötigt GDIp.au3
E