SixLabors/Samples

Simple samples

Hefaistos68 opened this issue · 2 comments

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.

That would be considered an advanced scenario. You can use the WrapMemory APIs to access Bitmap buffers.

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
}