<PackageReference Include="System.Drawing.Common" Version="9.0.9" />

CoreImageExtensions

static class CoreImageExtensions
using System.IO; using System.Runtime.CompilerServices; using Windows.Win32; using Windows.Win32.Foundation; using Windows.Win32.Graphics.GdiPlus; using Windows.Win32.System.Com; namespace System.Drawing { [NullableContext(1)] [Nullable(0)] internal static class CoreImageExtensions { internal unsafe static void Save(this IImage image, Stream stream, Guid encoder, Guid format, [Nullable(0)] EncoderParameters* encoderParameters) { ArgumentNullException.ThrowIfNull(stream, "stream"); if (encoder == Guid.Empty) throw new ArgumentNullException("encoder"); if (format == PInvokeCore.ImageFormatGIF) { ReadOnlySpan<byte> data = image.Data; if (data.Length > 0) { stream.Write(data); return; } } ComScope<IStream> scope = stream.ToIStream(false); try { PInvokeCore.GdipSaveImageToStream(image.GetPointer(), (IStream*)ref scope, &encoder, encoderParameters).ThrowIfFailed(); } finally { scope.Dispose(); } } internal unsafe static void Save(this IImage image, MemoryStream stream) { Guid guid = default(Guid); PInvokeCore.GdipGetImageRawFormat(image.GetPointer(), &guid).ThrowIfFailed(); Guid encoderClsid = ImageCodecInfoHelper.GetEncoderClsid(guid); if (guid == PInvokeCore.ImageFormatJPEG || encoderClsid == Guid.Empty) { guid = PInvokeCore.ImageFormatPNG; encoderClsid = ImageCodecInfoHelper.GetEncoderClsid(guid); } image.Save(stream, encoderClsid, guid, null); } } }