| File: System\Drawing\Imaging\Effects\Effect.cs | Web Access |
| Project: src\winforms\src\System.Drawing.Common\src\System.Drawing.Common.csproj (System.Drawing.Common) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #if NET9_0_OR_GREATER namespace System.Drawing.Imaging.Effects; /// <summary> /// Base class for all effects. /// </summary> public abstract unsafe class Effect : IDisposable { private CGpEffect* _nativeEffect; internal CGpEffect* NativeEffect => _nativeEffect; private protected Effect(Guid guid) { CGpEffect* nativeEffect; PInvokeGdiPlus.GdipCreateEffect(guid, &nativeEffect).ThrowIfFailed(); _nativeEffect = nativeEffect; } public void Dispose() { Dispose(disposing: true); GC.SuppressFinalize(this); } private protected void SetParameters<T>(ref T parameters) where T : unmanaged { fixed (T* p = ¶meters) { PInvokeGdiPlus.GdipSetEffectParameters(NativeEffect, p, (uint)sizeof(T)).ThrowIfFailed(); GC.KeepAlive(this); } } /// <summary> /// Cleans up Windows resources for this <see cref="Effect"/> /// </summary> ~Effect() => Dispose(disposing: false); protected virtual void Dispose(bool disposing) { if (_nativeEffect is not null) { PInvokeGdiPlus.GdipDeleteEffect(_nativeEffect); _nativeEffect = null; } } } #endif