Simple samples
Hefaistos68 opened this issue · 2 comments
Hefaistos68 commented
What about some simple examples that can be used day-by-day, like how to convert from System.Drawing formats to ImageSharp formats and vice versa?
Like how to construct a SixLabors.ImageSharp.Image from System.Drawing.Bitmap in memory?
I am having a hard time using ImageSharp for saving/loading/processing while having to display the results in the System.Drawing space.
JimBobSquarePants commented
That would be considered an advanced scenario. You can use the WrapMemory APIs to access Bitmap buffers.
Hefaistos68 commented
I have put together a few extension methods to convert to and from Bitmap and Image formats, also for byte[]. Maybe can be added to the samples.
internal static class ImageExtensions
{
#region Public Methods
/// <summary>
/// Extension method that converts a Image to an byte array
/// </summary>
/// <param name="imageIn">The Image to convert</param>
/// <returns>An byte array containing the JPG format Image</returns>
public static byte[] ToArray(this SixLabors.ImageSharp.Image imageIn)
{
using(MemoryStream ms = new MemoryStream())
{
imageIn.Save(ms, JpegFormat.Instance);
return ms.ToArray();
}
}
/// <summary>
/// Extension method that converts a Image to an byte array
/// </summary>
/// <param name="imageIn">The Image to convert</param>
/// <param name="fmt"></param>
/// <returns>An byte array containing the JPG format Image</returns>
public static byte[] ToArray(this SixLabors.ImageSharp.Image imageIn, IImageFormat fmt)
{
using(MemoryStream ms = new MemoryStream())
{
imageIn.Save(ms, fmt);
return ms.ToArray();
}
}
/// <summary>
/// Extension method that converts a Image to an byte array
/// </summary>
/// <param name="imageIn">The Image to convert</param>
/// <returns>An byte array containing the JPG format Image</returns>
public static byte[] ToArray(this global::System.Drawing.Image imageIn)
{
return ToArray(imageIn, ImageFormat.Png);
}
/// <summary>
/// Converts the image data into a byte array.
/// </summary>
/// <param name="imageIn">The image to convert to an array</param>
/// <param name="fmt">The format to save the image in</param>
/// <returns>An array of bytes</returns>
public static byte[] ToArray(this global::System.Drawing.Image imageIn, ImageFormat fmt)
{
using(MemoryStream ms = new MemoryStream())
{
imageIn.Save(ms, fmt);
return ms.ToArray();
}
}
/// <summary>
/// Extension method that converts a byte array with JPG data to an Image
/// </summary>
/// <param name="byteArrayIn">The byte array with JPG data</param>
/// <returns>The reconstructed Image</returns>
public static Image ToImage(this byte[] byteArrayIn)
{
using(MemoryStream ms = new MemoryStream(byteArrayIn))
{
Image returnImage = Image.Load(ms);
return returnImage;
}
}
public static global::System.Drawing.Image ToNetImage(this byte[] byteArrayIn)
{
using(MemoryStream ms = new MemoryStream(byteArrayIn))
{
global::System.Drawing.Image returnImage = global::System.Drawing.Image.FromStream(ms);
return returnImage;
}
}
#endregion Public Methods
}