Moin,
Habe ein ganz banales Problem (und stehe vermutlich auf einem der vielen möglichen Schläuche).
Ich möchte ein Bild in GDI+ Rotieren lassen.
Und zwar um seinen Mittelpunkt.
Daneben gibt es leider noch ein paar kleinere Problemchen.
Die Kantenglättung funktioniert innerhalb des Bildes wie gewünscht, aber der obere Rand ist sehr verpixelt.
Seltsamerweise ist der andere Rand korrekt interpoliert.
Screenshots:
Normal
[Blockierte Grafik: http://i.imgur.com/ZOSX4.png]
400% Zoom
[Blockierte Grafik: http://i.imgur.com/OLQqh.png]
"Skript"
Opt('GUICloseOnESC', 0)
Opt('GUIOnEventMode', 1)
Opt('MustDeclareVars', 1)
Opt('MouseCoordMode', 2)
#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Global $hGUI, $hBuf, $hGFX, $hBMP, $hMatrix, $hImg
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate('Test', 400, 400)
[/autoit] [autoit][/autoit] [autoit]$hGFX = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBMP = _GDIPlus_BitmapCreateFromGraphics(400, 400, $hGFX)
$hBuf = _GDIPlus_ImageGetGraphicsContext($hBMP)
_GDIPlus_GraphicsSetSmoothingMode($hBuf, 2)
_GDIPlus_GraphicsSetSmoothingMode($hGFX, 2)
$hMatrix = _GDIPlus_MatrixCreate()
[/autoit] [autoit][/autoit] [autoit]$hImg = _GDIPlus_ImageLoadFromFile('unnamed.png')
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]GUISetOnEvent(-3, '_Exit', $hGUI)
GUIRegisterMsg(0xF, 'WM_PAINT')
OnAutoItExitRegister('_Freigeben')
GUISetState(@SW_SHOW, $hGUI)
While Sleep(100)
_Rotieren()
WM_PAINT()
WEnd
Func _Rotieren()
[/autoit] [autoit][/autoit] [autoit]Local Static $iDeg = 0
$iDeg += 1 - ($iDeg > 359)*359
_GDIPlus_GraphicsClear($hBuf, 0xFF000000)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_MatrixRotate($hMatrix, 1)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_GraphicsSetTransform($hBuf, $hMatrix)
_GDIPlus_GraphicsDrawImage($hBuf, $hImg, 0, 0)
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func _Exit()
Exit
EndFunc
Func WM_PAINT()
_GDIPlus_GraphicsDrawImage($hGFX, $hBMP, 0, 0)
EndFunc
Func _Freigeben()
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_MatrixDispose($hMatrix)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_GraphicsDispose($hGFX)
_GDIPlus_GraphicsDispose($hGFX)
_GDIPlus_BitmapDispose($hBMP)
_GDIPlus_Shutdown()
EndFunc
Edit:
Hab herausgefunden wie man es mittig dreht (Forensuche lässt grüßen. Man braucht nur die richtigen Suchbegriffe...).
Das Problem mit den Kanten besteht weiterhin.
Edit2: Problem gelöst.