EncoderParameters
Encapsulates an array of EncoderParameter objects.
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Windows.Win32.Graphics.GdiPlus;
namespace System.Drawing.Imaging
{
public sealed class EncoderParameters : IDisposable
{
[Nullable(1)]
[field: Nullable(1)]
public EncoderParameter[] Param {
[NullableContext(1)]
get;
[NullableContext(1)]
set;
}
public EncoderParameters(int count)
{
Param = new EncoderParameter[count];
}
public EncoderParameters()
{
Param = new EncoderParameter[1];
}
internal unsafe global::Windows.Win32.Graphics.GdiPlus.EncoderParameters* ConvertToNative()
{
int num = Param.Length;
global::Windows.Win32.Graphics.GdiPlus.EncoderParameters* ptr = (global::Windows.Win32.Graphics.GdiPlus.EncoderParameters*)(long)Marshal.AllocHGlobal(sizeof(global::Windows.Win32.Graphics.GdiPlus.EncoderParameters) + (num - 1) * sizeof(global::Windows.Win32.Graphics.GdiPlus.EncoderParameter));
ptr->Count = (uint)num;
Span<global::Windows.Win32.Graphics.GdiPlus.EncoderParameter> parameters = ptr->Parameters;
for (int i = 0; i < num; i++) {
parameters[i] = Param[i].ToNative();
}
return ptr;
}
[return: Nullable(1)]
internal unsafe static EncoderParameters ConvertFromNative(global::Windows.Win32.Graphics.GdiPlus.EncoderParameters* native)
{
if (native == null)
throw Status.InvalidParameter.GetException();
Span<global::Windows.Win32.Graphics.GdiPlus.EncoderParameter> parameters = native->Parameters;
EncoderParameters encoderParameters = new EncoderParameters(parameters.Length);
for (int i = 0; i < parameters.Length; i++) {
encoderParameters.Param[i] = new EncoderParameter(new Encoder(parameters[i].Guid), (int)parameters[i].NumberOfValues, (EncoderParameterValueType)parameters[i].Type, (IntPtr)parameters[i].Value);
}
return encoderParameters;
}
public void Dispose()
{
EncoderParameter[] param = Param;
for (int i = 0; i < param.Length; i++) {
param[i]?.Dispose();
}
Param = null;
}
}
}