<PackageReference Include="System.Drawing.Common" Version="10.0.0-preview.1.25080.3" />

GpRegionExtensions

static class GpRegionExtensions
using System; using System.Runtime.CompilerServices; using Windows.Win32.Foundation; using Windows.Win32.Graphics.Gdi; namespace Windows.Win32.Graphics.GdiPlus { internal static class GpRegionExtensions { [NullableContext(1)] public unsafe static RegionScope GetRegionScope(this IPointer<GpRegion> region, IPointer<GpGraphics> graphics) { RegionScope result = new RegionScope(InitializeFromGdiPlus(region.GetPointer(), graphics.GetPointer())); GC.KeepAlive(region); GC.KeepAlive(graphics); return result; } [NullableContext(1)] public unsafe static RegionScope GetRegionScope(this IPointer<GpRegion> region, HWND hwnd) { GpGraphics* graphics = null; PInvokeGdiPlus.GdipCreateFromHWND(hwnd, &graphics).ThrowIfFailed(); RegionScope result = new RegionScope(InitializeFromGdiPlus(region.GetPointer(), graphics)); GC.KeepAlive(region); return result; } private unsafe static HRGN InitializeFromGdiPlus(GpRegion* region, GpGraphics* graphics) { BOOL value = default(BOOL); PInvokeGdiPlus.GdipIsInfiniteRegion(region, graphics, &value).ThrowIfFailed(); if ((bool)value) return HRGN.Null; HRGN result = default(HRGN); PInvokeGdiPlus.GdipGetRegionHRgn(region, graphics, &result).ThrowIfFailed(); return result; } } }