Hi,
ich stehe mal wieder im Wald und hoffe darauf, dass ihr nach dem gestrigen Trubel wieder nüchtern genug seid, um mir helfen zu können.
Nachstehendes Script bewirkt nach dem Laden eines Bildes (idealerweise nicht grösser als 500x500) und nach Drücken des Buttons „Color All But One“, dass aus dem zuvor aufgerufenen Bild ein Tortenstück „herausgeschnitten“ wird.
Der grosse Rest der „Torte“ wird lediglich auf transparent geschaltet und ist dadurch nicht mehr sichtbar.
Meine Frage nun:
Wie kann ich mit dem sichtbaren „Tortenstück“ als separates Objekt weiterarbeiten, ohne jedesmal die gesamte „Torte“ zeichnen zu müssen?
Also, wie könnte ich das sichtbare „Pie“ zum Beispiel kopieren und zusätzlich zum dem vorhandenen darstellen?
[autoit]#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <GDIPlus.au3>
Opt('MustDeclareVars', 1)
[/autoit][autoit][/autoit][autoit]Global $msg, $hGUI, $floor1, $loadPIC, $ColorAllButOnePie
Global $hGraphics1, $hImage1, $PIC, $PICx, $PICy
Global $floor1x = 500
Global $floor1y = 500
$hGUI = GUICreate("", 600, 600)
[/autoit][autoit][/autoit][autoit]$loadPIC = GUICtrlCreateButton("Bild Laden", 513, 100, 85)
$ColorAllButOnePie = GUICtrlCreateButton("Color All But One", 513, 140, 85)
$floor1 = GUICtrlCreateGraphic(10, 10, $floor1x, $floor1y)
GUICtrlSetBkColor($floor1, 0xFFece9d8) ;0xffffff)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 0, 0, $floor1x, $floor1y)
GUISetState()
[/autoit][autoit][/autoit][autoit]_GDIPlus_Startup()
[/autoit][autoit][/autoit][autoit]While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $loadPIC
_loadPIC()
Case $msg = $ColorAllButOnePie
_ColorAllButOnePie($floor1x, $floor1y, $hGraphics1, $PICx, $PICy, 0, 300)
EndSelect
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
[/autoit][autoit][/autoit][autoit]_GDIPlus_GraphicsDispose($hGraphics1)
_GDIPlus_ImageDispose($hImage1)
_GDIPlus_Shutdown()
Func _loadPIC()
[/autoit][autoit][/autoit][autoit]$PIC = FileOpenDialog("Bitte Bild auswählen", "J:\_LW_K\__OwnProjects\_autoIt\LissajousUndAndere\tesselation\", "Bilder (*.jpg;*.bmp;*.png)", 1 + 4 )
_GDIPlus_GraphicsClear($hGraphics1, 0xFFece9d8)
$hImage1 = _GDIPlus_ImageLoadFromFile($PIC)
[/autoit][autoit][/autoit][autoit]$PICx = _GDIPlus_ImageGetWidth($hImage1)
$PICy = _GDIPlus_ImageGetHeight($hImage1)
$hGraphics1 = _GDIPlus_GraphicsCreateFromHWND(GUICtrlGetHandle($floor1))
_GDIPlus_GraphicsDrawImage ($hGraphics1, $hImage1, $floor1x/2-$PICx/2, $floor1y/2-$PICy/2)
[/autoit][autoit][/autoit][autoit]EndFunc
[/autoit][autoit][/autoit][autoit][/autoit][autoit]Func _ColorAllButOnePie($hGuiX, $hGuiY, $hGraphic, $PICx, $PICy, $StartPie, $EndPie)
Local $Diag = Sqrt(($PICx*$PICx) + ($PICy*$PICy)) ; Berechnung der Bilddiagonale
Local $SegmentX = ($Diag-$PICx)/2 ; Berechnung des aus dem Kreis herausstehenden Segments zwischen Kreis und Rechteck des Bildes
Local $SegmentY = ($Diag-$PICy)/2 ; " "
Local $MidX = $hGuiX/2-$PICx/2 ; Berechnung der Bildmitte
Local $MidY = $hGuiY/2-$PICy/2 ; " "
Local $iTrans = 255 ;255
[/autoit][autoit][/autoit][autoit]Local $hBrush = _GDIPlus_BrushCreateSolid("0x" & Hex($iTrans, 2) & "ece9d8")
[/autoit][autoit][/autoit][autoit]_GDIPlus_GraphicsFillPie($hGraphic, $MidX-$SegmentX, $MidY-$SegmentY, $PICx+($Diag-$PICx), $PICy+$Diag-$PICy, $StartPie, $EndPie, $hBrush)
EndFunc