Nachdem ich den Code „Rotating Image 2.au3“ (drei Postings zuvor) zunächst verworfen hatte, weil er mir auf den ersten Blick für meine Zwecke nicht geeignet erschien, habe ich ihn mir nun doch noch einmal genauer angesehen. Auch wenn ich den grössten Teil des Codes herausgelöscht habe (ich hätte wohl auch bei Null anfangen können
), hat die Experimentiererei mit dem Restcode doch dazu geführt, endlich meine ursprüngliche Frage zu beantworten.
Mit dem nachfolgenden Code können Bilder im Format JPG, BMP und PNG geladen werden. Es können sicher auch andere Formate geladen werden, die Transparenz funktioniert jedoch nur mit PNG-Bildern. Darauf kam es mir in erster Linie auch an. Die Bilder lassen sich mit der Maus frei auf dem Desktop verschieben.
Bei der Veränderung von Parametern im Code können zur besseren Orientierung die Zeile 71 (…GraphicsDrawImageRect) aktiviert, und der Farbwert in Zeile 67 (…GraphicsClear) getauscht werden. Damit ist das komplette Fenster, in dem sich die Grafik bewegt, ersichtlich.
Zum Testen hatte ich keine Schleife eingebaut, also nach dem Laden des Bildes nicht nur einmal auf den Button „rotate“ klicken. 
Also, Matrix-Funktionen lassen sich auch auf mit der Maus verschiebbare transparente PNG-Bilder anwenden.
#include <GDIPlus.au3>
#include <windowsconstants.au3>
#Include <Misc.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
Opt("MustDeclareVars", 1)
Global $hGUI_Main, $hwnd, $msg, $load, $rotate, $close, $graphics, $bitmap, $backbuffer, $matrix, $image, $PIC
Global Const $AC_SRC_ALPHA = 1
$hGUI_Main = GUICreate("GDI+", 400, 300, 400, 400, $WS_CAPTION)
$load = GuiCtrlCreateButton("load" ,10,10)
$rotate = GuiCtrlCreateButton("rotate" ,10,40)
$close = GuiCtrlCreateButton("end" ,10,70)
GUISetState()
$hwnd = GUICreate("Test", 100, 100, 90, 26, $WS_POPUPWINDOW , BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $hGUI_Main)
_GDIPlus_Startup()
$graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
$bitmap = _GDIPlus_BitmapCreateFromGraphics(300, 300, $graphics)
$backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
$matrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixTranslate($matrix, 150, 150)
While 1
$msg = GUIGetMsg()
Select
case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $load
_load()
Case $msg = $rotate
_rotate()
Case $msg = $close
_close()
EndSelect
WEnd
_GDIPlus_ImageDispose($image)
_GDIPlus_GraphicsDispose($graphics)
_WinAPI_DeleteObject($bitmap)
_GDIPlus_MatrixDispose($matrix)
_GDIPlus_BitmapDispose($bitmap)
_GDIPlus_Shutdown ()
Func _load()
$PIC = FileOpenDialog("Bitte Bild auswählen", "C:\", "Bilder (*.jpg;*.bmp;*.png)", 1 + 4 )
If $PIC = "" Then Return
_rotate()
EndFunc
Func _rotate()
$image = _GDIPlus_ImageLoadFromFile($PIC)
_GDIPlus_GraphicsClear($backbuffer, $GDIP_PXF32ARGB) ;0xFF123456)
_GDIPlus_MatrixRotate($matrix, -15)
_GDIPlus_GraphicsSetTransform($backbuffer, $matrix)
_GDIPlus_GraphicsDrawImageRect($backbuffer, $image, -100, -100, 200, 200)
;_GDIPlus_GraphicsDrawRect($backbuffer, -100, -100, 200, 200) ;
SetBitMap($hwnd, $bitmap, 100)
GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
GUISetState()
EndFunc
Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
If ($iMsg = $WM_NCHITTEST) then Return $HTCAPTION
EndFunc
Func SetBitmap($hGUI, $hImage, $iOpacity)
Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
$hScrDC = _WinAPI_GetDC(0)
$hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
$tSize = DllStructCreate($tagSIZE)
$pSize = DllStructGetPtr($tSize )
DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
$tSource = DllStructCreate($tagPOINT)
$pSource = DllStructGetPtr($tSource)
$tBlend = DllStructCreate($tagBLENDFUNCTION)
$pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha" , $iOpacity )
DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
_WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
_WinAPI_ReleaseDC (0, $hScrDC)
_WinAPI_SelectObject($hMemDC, $hOld)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteDC ($hMemDC)
EndFunc
Func _close()
Exit
EndFunc