Updates the clipping region of this Graphics object to a region that is the combination of itself and the region specified by a graphics path
#include <GDIPlus.au3>
_GDIPlus_GraphicsSetClipPath ( $hGraphics, $hPath [, $iCombineMode = 0] )
$hGraphics | Pointer to a Graphics object |
$hPath | Pointer to a GraphicsPath object that specifies the region to be combined with the clipping region of the Graphics object |
$iCombineMode | [optional] Regions combination mode: 0 - The existing region is replaced by the new region 1 - The existing region is replaced by the intersection of itself and the new region 2 - The existing region is replaced by the union of itself and the new region 3 - The existing region is replaced by the result of performing an XOR on the two regions 4 - The existing region is replaced by the portion of itself that is outside of the new region 5 - The existing region is replaced by the portion of the new region that is outside of the existing region |
Success: | True. |
Failure: | False and sets the @error flag to non-zero, @extended may contain GPSTATUS error code ($GPIP_ERR* see GPIPlusConstants.au3). |
If a figure in the path is not closed, this method treats the nonclosed figure as if it were closed by a straight line that connects the figure's starting and ending points.
Search GdipSetClipPath in MSDN Library.
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <ScreenCapture.au3>
#include <WinAPIHObj.au3>
Example()
Func Example()
Local $hBMP = _ScreenCapture_Capture()
Local $hGUI = GUICreate("GDI+", 400, 400)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()
Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI) ;Create a graphics object from a window handle
Local $hBmp_Buffer = _GDIPlus_BitmapCreateFromGraphics(400, 400, $hGraphics)
Local $hGfx_Buffer = _GDIPlus_ImageGetGraphicsContext($hBmp_Buffer)
Local $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
Local $hMatrix1 = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixTranslate($hMatrix1, 200, 200)
Local $hMatrix2 = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixTranslate($hMatrix2, 200, 200)
Local $hPath = _GDIPlus_PathCreate()
For $i = 0 To 300 Step 24
_GDIPlus_PathAddEllipse($hPath, -$i, -$i, $i * 2, $i * 2)
Next
Local $hRegion = _GDIPlus_RegionCreate()
_GDIPlus_RegionCombinePath($hRegion, $hPath, 4)
Local $hTimer = TimerInit()
; Loop until the user exits.
Do
If TimerDiff($hTimer) > 20 Then
_GDIPlus_GraphicsResetClip($hGfx_Buffer)
_GDIPlus_GraphicsClear($hGfx_Buffer, 0x33FFAA00)
_GDIPlus_MatrixRotate($hMatrix1, 1)
_GDIPlus_MatrixRotate($hMatrix2, -1)
_GDIPlus_GraphicsSetTransform($hGfx_Buffer, $hMatrix1)
_GDIPlus_GraphicsSetClipRegion($hGfx_Buffer, $hRegion)
_GDIPlus_GraphicsDrawImage($hGfx_Buffer, $hBitmap, -300, -300)
_GDIPlus_GraphicsSetTransform($hGfx_Buffer, $hMatrix2)
_GDIPlus_GraphicsSetClipPath($hGfx_Buffer, $hPath)
_GDIPlus_GraphicsDrawImage($hGfx_Buffer, $hBitmap, -300, -300)
_GDIPlus_GraphicsDrawImage($hGraphics, $hBmp_Buffer, 0, 0)
$hTimer = TimerInit()
EndIf
Until GUIGetMsg() = $GUI_EVENT_CLOSE
; Clean up resources
_GDIPlus_RegionDispose($hRegion)
_GDIPlus_PathDispose($hPath)
_GDIPlus_MatrixDispose($hMatrix1)
_GDIPlus_MatrixDispose($hMatrix2)
_GDIPlus_BitmapDispose($hBitmap)
_WinAPI_DeleteObject($hBMP)
_GDIPlus_GraphicsDispose($hGfx_Buffer)
_GDIPlus_BitmapDispose($hBmp_Buffer)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
EndFunc ;==>Example