Guten Abend euch allen!
Ich versuche gerade aus einem Bild einen Bereich mit Hilfe von GDI+ herauszuschneiden. Das Bild wird auf die GUI gemalt. Dann sollte ein Bereich auswählbar sein (Links Klick + Ziehen) und wenn die Maus losgelassen wird dieser gespeichert werden. Leider weiß ich nicht wie man ein zuvor gemaltes Rechteck wieder entfernen kann, sodass immer ein neues halbtransparentes überlagernd Gezeichnet wird - Folge ist, dass man nicht mehr sieht was man auswählt.
Hat jemand vielleicht eine Idee, wie ich dieses Problem lösen kann? Ich habe das Rechteck mit GDI+ und nicht mit Hilfe einer zweiten GUI gemacht, da ich dies als schöner Emfinde.
Hier erstmal der Code:
[autoit]#cs ----------------------------------------------------------------------------
[/autoit][autoit][/autoit][autoit]AutoIt Version: 3.3.6.1
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
[/autoit][autoit][/autoit][autoit]; Script Start - Add your code below here
#include <ScreenCapture.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <Misc.au3>
Opt("WinTitleMatchMode", 1)
Opt("GUIOnEventMode", 1)
HotKeySet("^b", "_get")
#region ### START Koda GUI section ### Form=
$hForm = GUICreate("", 169, 54, 192, 124, 0)
GUISetCursor(3);
#endregion ### END Koda GUI section ###
GUISetOnEvent($GUI_EVENT_CLOSE, "close", $hForm)
[/autoit][autoit][/autoit][autoit];Global $mTempPos[2]
$winHandle = WinGetHandle("")
If $winHandle = 0 Then Exit
$winPos = WinGetPos("")
If $winPos = 0 Then Exit
WinMove($hForm, "", "", "", $winPos[2], $winPos[3])
_GDIPlus_Startup();
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hForm)
$hRectBrush = _GDIPlus_BrushCreateSolid(0x33FF0000)
$hDelBrush = _GDIPlus_BrushCreateSolid(0x00FFFFFF)
While 1
If WinActive($hForm) Then
If (_IsPressed(01)) Then
$mPos = MouseGetPos();
$mTempPos = $mPos;
$hGraphicRec = _GDIPlus_GraphicsCreateFromHWND($hForm)
While (_IsPressed(01))
$mNewPos = MouseGetPos()
If ($mNewPos[0] <> $mTempPos[0] Or $mNewPos[1] <> $mTempPos[1]) Then
_GDIPlus_GraphicsFillRect($hGraphicRec, $mPos[0],$mPos[1],$mNewPos[0]-$mPos[0],$mNewPos[1]-$mPos[1], $hRectBrush)
EndIf
$mTempPos = $mNewPos
WEnd
ElseIf _IsPressed(02) Then
GUISetState(@SW_HIDE, $hForm)
EndIf
Sleep(50)
EndIf
WEnd
Func close()
Exit
EndFunc ;==>close
Func _takeScreen()
$hBitmap = _ScreenCapture_CaptureWnd("", $winHandle)
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
GUISetState(@SW_SHOW, $hForm)
_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
Return (1)
EndFunc ;==>_takeScreen
Func _get()
_takeScreen()
EndFunc ;==>_getBot
Und weiß jemand wie ich aus meinem Ursprungsbild den ausgewählten Bereich herausschneiden und speichern kann?
Ich freue mich über jede Antwort!
Vielen Dank im Voraus und viele Grüße,
Lennart