Last active
May 20, 2023 11:18
-
-
Save vurdalakov/00d9471356da94454b372843067af24e to your computer and use it in GitHub Desktop.
SixLabors.ImageSharp extensions: convert Image<TPixel> to byte array and System.Drawing.Bitmap etc.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace Vurdalakov | |
{ | |
using System; | |
using System.IO; | |
using SixLabors.ImageSharp; | |
using SixLabors.ImageSharp.Advanced; | |
using SixLabors.ImageSharp.Formats; | |
using SixLabors.ImageSharp.Formats.Png; | |
using SixLabors.ImageSharp.PixelFormats; | |
public static class ImageSharpExtensions | |
{ | |
public static Byte[] ToArray<TPixel>(this Image<TPixel> image, IImageFormat imageFormat) where TPixel : unmanaged, IPixel<TPixel> | |
{ | |
using (var memoryStream = new MemoryStream()) | |
{ | |
var imageEncoder = image.GetConfiguration().ImageFormatsManager.FindEncoder(imageFormat); | |
image.Save(memoryStream, imageEncoder); | |
return memoryStream.ToArray(); | |
} | |
} | |
public static System.Drawing.Bitmap ToBitmap<TPixel>(this Image<TPixel> image) where TPixel : unmanaged, IPixel<TPixel> | |
{ | |
using (var memoryStream = new MemoryStream()) | |
{ | |
var imageEncoder = image.GetConfiguration().ImageFormatsManager.FindEncoder(PngFormat.Instance); | |
image.Save(memoryStream, imageEncoder); | |
memoryStream.Seek(0, SeekOrigin.Begin); | |
return new System.Drawing.Bitmap(memoryStream); | |
} | |
} | |
public static Image<TPixel> ToImageSharpImage<TPixel>(this System.Drawing.Bitmap bitmap) where TPixel : unmanaged, IPixel<TPixel> | |
{ | |
using (var memoryStream = new MemoryStream()) | |
{ | |
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png); | |
memoryStream.Seek(0, SeekOrigin.Begin); | |
return Image.Load<TPixel>(memoryStream); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I agree with @snechaev - disposing of the stream causes an exception when converting from
ImageSharp
toSystem.Drawing.Bitmap
. I use the following: