| File: System\Drawing\Imaging\EncoderParameters.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. using System.Runtime.InteropServices; namespace System.Drawing.Imaging; public sealed class EncoderParameters : IDisposable { public EncoderParameters(int count) => Param = new EncoderParameter[count]; public EncoderParameters() => Param = new EncoderParameter[1]; public EncoderParameter[] Param { get; set; } internal unsafe GdiPlus.EncoderParameters* ConvertToNative() { int length = Param.Length; // The struct has the first EncoderParameter in it. GdiPlus.EncoderParameters* native = (GdiPlus.EncoderParameters*)Marshal.AllocHGlobal( sizeof(GdiPlus.EncoderParameters) + ((length - 1) * sizeof(GdiPlus.EncoderParameter))); native->Count = (uint)length; Span<GdiPlus.EncoderParameter> parameters = native->Parameters; for (int i = 0; i < length; i++) { parameters[i] = Param[i].ToNative(); } return native; } internal static unsafe EncoderParameters ConvertFromNative(GdiPlus.EncoderParameters* native) { if (native is null) { throw Status.InvalidParameter.GetException(); } var nativeParameters = native->Parameters; EncoderParameters parameters = new(nativeParameters.Length); for (int i = 0; i < nativeParameters.Length; i++) { parameters.Param[i] = new EncoderParameter( new Encoder(nativeParameters[i].Guid), (int)nativeParameters[i].NumberOfValues, (EncoderParameterValueType)nativeParameters[i].Type, (nint)nativeParameters[i].Value); } return parameters; } public void Dispose() { foreach (EncoderParameter p in Param) { p?.Dispose(); } Param = null!; } }