Das geht auch einfacher. Es gibt dafür ein Event ($GUI_EVENT_RESTORE). Einfach eine Redraw-Funktion damit aufrufen:
Spoiler anzeigen
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <ScreenCapture.au3>
#include <WindowsConstants.au3>
HotKeySet("{F1}", "_shoot")
[/autoit] [autoit][/autoit] [autoit]Opt('GUIOnEventMode', 1)
GUIRegisterMsg($WM_PAINT, 'WM_PAINT')
_GDIPlus_Startup() ;Vorschau
Global $iPreviewMaxDim = 200, $hPreviewBitmap, $iPreviewWidth, $iPreviewHeight
Global $hPreviewGui = GUICreate('Vorschau-Fenster', $iPreviewMaxDim, $iPreviewMaxDim + 24, -1, -1)
Global $hPreviewGraphic = _GDIPlus_GraphicsCreateFromHWND($hPreviewGui)
GUISetState(@SW_SHOW, $hPreviewGui)
GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
GUISetOnEvent($GUI_EVENT_RESTORE, '_Redraw')
$datei = @TempDir & "\" & "test.jpg"
_ScreenCapture_Capture($datei, 0, 0, 100, 100)
_PreviewLoadImage($datei)
While 1
Sleep(10)
WEnd
Func _end()
_GDIPlus_BitmapDispose($hPreviewBitmap)
_GDIPlus_GraphicsDispose($hPreviewGraphic)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_end
Func _PreviewLoadImage($sImgFile)
$hPreviewBitmap = _GDIPlus_BitmapCreateFromFile($sImgFile)
If $hPreviewBitmap = 0 Then
_GDIPlus_GraphicsFillRect($hPreviewGraphic, 0, 0, $iPreviewMaxDim, $iPreviewMaxDim)
Return
EndIf
$iPreviewWidth = _GDIPlus_ImageGetWidth($hPreviewBitmap)
$iPreviewHeight = _GDIPlus_ImageGetHeight($hPreviewBitmap)
$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixTranslate($hMatrix, 200, 0)
_GDIPlus_MatrixRotate($hMatrix, 90, "False")
_GDIPlus_GraphicsSetTransform($hPreviewGraphic, $hMatrix)
_GDIPlus_GraphicsClear($hPreviewGraphic)
_GDIPlus_GraphicsDrawImage($hPreviewGraphic, $sImgFile, -$iPreviewWidth / 2, -$iPreviewHeight / 2)
$iVector = $iPreviewWidth / $iPreviewHeight
If $iVector > 1 Then
$iPreviewWidth = $iPreviewMaxDim
$iPreviewHeight = Int($iPreviewWidth / $iVector)
Else
$iPreviewHeight = $iPreviewMaxDim
$iPreviewWidth = Int($iPreviewHeight * $iVector)
EndIf
$hBrush = _GDIPlus_BrushCreateSolid(0xFFEBCD)
$hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
$hBrush = _GDIPlus_BrushCreateSolid(0xFF8EB8FD) ;Hintergrundfarbe
_GDIPlus_GraphicsFillRect($hPreviewGraphic, 0, 0, $iPreviewMaxDim, $iPreviewMaxDim, $hBrush)
_GDIPlus_GraphicsDrawImageRect($hPreviewGraphic, $hPreviewBitmap, ($iPreviewMaxDim - $iPreviewWidth) / 2, ($iPreviewMaxDim - $iPreviewHeight) / 2, $iPreviewWidth, $iPreviewHeight)
EndFunc ;==>_PreviewLoadImage
Func _Redraw()
_GDIPlus_GraphicsDrawImageRect($hPreviewGraphic, $hPreviewBitmap, ($iPreviewMaxDim - $iPreviewWidth) / 2, ($iPreviewMaxDim - $iPreviewHeight) / 2, $iPreviewWidth, $iPreviewHeight)
EndFunc
Func WM_PAINT($hWnd, $Msg, $wParam, $lParam)
If $hWnd = $hPreviewGui Then
_GDIPlus_GraphicsDrawImageRect($hPreviewGraphic, $hPreviewBitmap, ($iPreviewMaxDim - $iPreviewWidth) / 2, ($iPreviewMaxDim - $iPreviewHeight) / 2, $iPreviewWidth, $iPreviewHeight)
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_PAINT
Func _shoot()
$datei2 = @TempDir & "\" & "test2.jpg"
_ScreenCapture_Capture($datei2, 400, 400, 500, 500)
_PreviewLoadImage($datei2)
EndFunc ;==>_shoot