/// <summary>
 /// Converts the specified image format.
 /// </summary>
 /// <param name="image">The image.</param>
 /// <param name="imageFormat">The image format.</param>
 /// <returns>Image.</returns>
 public static Image Convert(this Image image, ImageFormat imageFormat)
 {
     ImageManipulation imageManipulation = new ImageManipulation();
     return imageManipulation.Convert(image, imageFormat);
 }
 /// <summary>
 /// Resizes and image by height
 /// </summary>
 /// <param name="image">The image.</param>
 /// <param name="height">The height.</param>
 /// <param name="backgroundFillColor">Color of the background fill.</param>
 /// <returns>Image.</returns>
 public static Image ResizeByHeight(this Image image, int height, Color backgroundFillColor)
 {
     ImageManipulation imageManipulation = new ImageManipulation();
     return imageManipulation.ResizeByHeight(image, height, backgroundFillColor);
 }
 /// <summary>
 /// Resizes an image by width
 /// </summary>
 /// <param name="image">The image.</param>
 /// <param name="width">The width.</param>
 /// <param name="backgroundFillColor">Color of the background fill.</param>
 /// <returns>Image.</returns>
 public static Image ResizeByWidth(this Image image, int width, Color backgroundFillColor)
 {
     ImageManipulation imageManipulation = new ImageManipulation();
     return imageManipulation.ResizeByWidth(image, width, backgroundFillColor);
 }
 /// <summary>
 /// Resizes the specified image to a new size. (Maintains aspect ratio if aspect ratio is set to true and fills the background of the window with the specified color) 
 /// </summary>
 /// <param name="image">The image.</param>
 /// <param name="newSize">The new size.</param>
 /// <param name="backgroundFillColor">Color of the background fill.</param>
 /// <param name="maintainAspectRatio">if set to <c>true</c> [maintain aspect ratio].</param>
 /// <returns>Image.</returns>
 public static Image Resize(this Image image, Size newSize, Color backgroundFillColor, bool maintainAspectRatio = true)
 {
     ImageManipulation imageManipulation = new ImageManipulation();
     return imageManipulation.Resize(image, newSize, backgroundFillColor, maintainAspectRatio);
 }
 /// <summary>
 /// Optimizes the specified image format based on the specified quality
 /// </summary>
 /// <param name="image">The image.</param>
 /// <param name="imageFormat">The image format.</param>
 /// <param name="quality">The quality.</param>
 /// <returns>Image.</returns>
 public static Image Optimize(this Image image, ImageFormat imageFormat, ImageQuality quality)
 {
     ImageManipulation imageManipulation = new ImageManipulation();
     return imageManipulation.Optimize(image, imageFormat, quality);
 }
        /// <summary>
        /// Optimizes the specified image format.
        /// </summary>
        /// <param name="image">The image.</param>
        /// <param name="imageFormat">The image format.</param>
        /// <param name="quality">The quality. A value from 0 to 100</param>
        /// <returns>Image.</returns>
        public static Image Optimize(this Image image, ImageFormat imageFormat, long quality)
        {
            if ((quality < 0) || (quality > 100))
                throw new System.Exception("Invalid quality value, quality value can range between 1 to 100");

            ImageManipulation imageManipulation = new ImageManipulation();
            return imageManipulation.Optimize(image, imageFormat, quality);
        }
        /// <summary>
        /// Crops the background. (Removes unwanted backgrounds)
        /// </summary>
        /// <param name="image">The image.</param>
        /// <param name="pass">The pass.</param>
        /// <returns>Image.</returns>
        public static Image CropBackground(this Image image, double  pass = 1)
        {
            ImageManipulation imageManipulation = new ImageManipulation();

            for (int count = 0; count < pass; count ++)
            {
                image = imageManipulation.CropBackground(image);
            }

            return image;
        }
 /// <summary>
 /// Crops the specified image to new size from the specified top left points.
 /// </summary>
 /// <param name="image">The image.</param>
 /// <param name="topLeft">The top left.</param>
 /// <param name="newSize">The new size.</param>
 /// <returns>Image.</returns>
 public static Image Crop(this Image image, Point topLeft, Size newSize)
 {
     ImageManipulation imageManipulation = new ImageManipulation();
     return imageManipulation.Crop(image, topLeft, newSize);
 }