diff Chronosv2/source/Extensions/BitmapExtensions.cs @ 10:443821e55f06

Initial cleaned up add from Codeplex files
author stevenh7776 stevenhollidge@hotmail.com
date Tue, 21 Feb 2012 17:25:44 +0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Chronosv2/source/Extensions/BitmapExtensions.cs	Tue Feb 21 17:25:44 2012 +0700
@@ -0,0 +1,191 @@
+using System;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+
+namespace Chronos.Extensions
+{
+    /// <summary>
+    /// Extension methods for the System.Drawing.Bitmap class
+    /// </summary>
+    public static class BitmapExtensions
+    {
+        #region · Extensions ·
+
+        /// <summary>
+        /// Scales the bitmap to the passed target size without respecting the aspect.
+        /// </summary>
+        /// <param name="bitmap">The source bitmap.</param>
+        /// <param name="size">The target size.</param>
+        /// <returns>The scaled bitmap</returns>
+        /// <example><code>
+        /// var bitmap = new Bitmap("image.png");
+        /// var thumbnail = bitmap.ScaleToSize(100, 100);
+        /// </code></example>
+        public static Bitmap ScaleToSize(this Bitmap bitmap, Size size)
+        {
+            return bitmap.ScaleToSize(size.Width, size.Height);
+        }
+
+        /// <summary>
+        /// Scales the bitmap to the passed target size without respecting the aspect.
+        /// </summary>
+        /// <param name="bitmap">The source bitmap.</param>
+        /// <param name="width">The target width.</param>
+        /// <param name="height">The target height.</param>
+        /// <returns>The scaled bitmap</returns>
+        /// <example><code>
+        /// var bitmap = new Bitmap("image.png");
+        /// var thumbnail = bitmap.ScaleToSize(100, 100);
+        /// </code></example>
+        public static Bitmap ScaleToSize(this Bitmap bitmap, int width, int height)
+        {
+            var scaledBitmap = new Bitmap(width, height);
+
+            using (var g = Graphics.FromImage(scaledBitmap))
+            {
+                g.InterpolationMode = InterpolationMode.HighQualityBicubic;
+                g.DrawImage(bitmap, 0, 0, width, height);
+            }
+            
+            return scaledBitmap;
+        }
+
+        /// <summary>
+        /// Scales the bitmap to the passed target size by respecting the aspect.
+        /// </summary>
+        /// <param name="bitmap">The source bitmap.</param>
+        /// <param name="size">The target size.</param>
+        /// <returns>The scaled bitmap</returns>
+        /// <example><code>
+        /// var bitmap = new Bitmap("image.png");
+        /// var thumbnail = bitmap.ScaleProportional(100, 100);
+        /// </code></example>
+        /// <remarks>Please keep in mind that the returned bitmaps size might not match the desired size due to original bitmaps aspect.</remarks>
+        public static Bitmap ScaleProportional(this Bitmap bitmap, Size size)
+        {
+            return bitmap.ScaleProportional(size.Width, size.Height);
+        }
+
+        /// <summary>
+        /// Scales the bitmap to the passed target size by respecting the aspect.
+        /// </summary>
+        /// <param name="bitmap">The source bitmap.</param>
+        /// <param name="width">The target width.</param>
+        /// <param name="height">The target height.</param>
+        /// <returns>The scaled bitmap</returns>
+        /// <example><code>
+        /// var bitmap = new Bitmap("image.png");
+        /// var thumbnail = bitmap.ScaleProportional(100, 100);
+        /// </code></example>
+        /// <remarks>Please keep in mind that the returned bitmaps size might not match the desired size due to original bitmaps aspect.</remarks>
+        public static Bitmap ScaleProportional(this Bitmap bitmap, int width, int height)
+        {
+            float proportionalWidth, proportionalHeight;
+
+            if (width.Equals(0))
+            {
+                proportionalWidth = ((float)height) / bitmap.Size.Height * bitmap.Width;
+                proportionalHeight = height;
+            }
+            else if (height.Equals(0))
+            {
+                proportionalWidth = width;
+                proportionalHeight = ((float)width) / bitmap.Size.Width * bitmap.Height;
+            }
+            else if (((float)width) / bitmap.Size.Width * bitmap.Size.Height <= height)
+            {
+                proportionalWidth = width;
+                proportionalHeight = ((float)width) / bitmap.Size.Width * bitmap.Height;
+            }
+            else
+            {
+                proportionalWidth = ((float)height) / bitmap.Size.Height * bitmap.Width;
+                proportionalHeight = height;
+            }
+
+            return bitmap.ScaleToSize((int)proportionalWidth, (int)proportionalHeight);
+        }
+
+        /// <summary>
+        /// Scales the bitmap to the passed target size by respecting the aspect. The overlapping background is filled with the given background color.
+        /// </summary>
+        /// <param name="bitmap">The source bitmap.</param>
+        /// <param name="size">The target size.</param>
+        /// <returns>The scaled bitmap</returns>
+        /// <example><code>
+        /// var bitmap = new Bitmap("image.png");
+        /// var thumbnail = bitmap.ScaleToSizeProportional(100, 100);
+        /// </code></example>
+        public static Bitmap ScaleToSizeProportional(this Bitmap bitmap, Size size)
+        {
+            return bitmap.ScaleToSizeProportional(Color.White, size);
+        }
+
+        /// <summary>
+        /// Scales the bitmap to the passed target size by respecting the aspect. The overlapping background is filled with the given background color.
+        /// </summary>
+        /// <param name="bitmap">The source bitmap.</param>
+        /// <param name="backgroundColor">The color of the background.</param>
+        /// <param name="size">The target size.</param>
+        /// <returns>The scaled bitmap</returns>
+        /// <example><code>
+        /// var bitmap = new Bitmap("image.png");
+        /// var thumbnail = bitmap.ScaleToSizeProportional(100, 100);
+        /// </code></example>
+        public static Bitmap ScaleToSizeProportional(this Bitmap bitmap, Color backgroundColor, Size size)
+        {
+            return bitmap.ScaleToSizeProportional(backgroundColor, size.Width, size.Height);
+        }
+
+        /// <summary>
+        /// Scales the bitmap to the passed target size by respecting the aspect. The overlapping background is filled with the given background color.
+        /// </summary>
+        /// <param name="bitmap">The source bitmap.</param>
+        /// <param name="width">The target width.</param>
+        /// <param name="height">The target height.</param>
+        /// <returns>The scaled bitmap</returns>
+        /// <example><code>
+        /// var bitmap = new Bitmap("image.png");
+        /// var thumbnail = bitmap.ScaleToSizeProportional(100, 100);
+        /// </code></example>
+        public static Bitmap ScaleToSizeProportional(this Bitmap bitmap, int width, int height)
+        {
+            return bitmap.ScaleToSizeProportional(Color.White, width, height);
+        }
+
+        /// <summary>
+        /// Scales the bitmap to the passed target size by respecting the aspect. The overlapping background is filled with the given background color.
+        /// </summary>
+        /// <param name="bitmap">The source bitmap.</param>
+        /// <param name="backgroundColor">The color of the background.</param>
+        /// <param name="width">The target width.</param>
+        /// <param name="height">The target height.</param>
+        /// <returns>The scaled bitmap</returns>
+        /// <example><code>
+        /// var bitmap = new Bitmap("image.png");
+        /// var thumbnail = bitmap.ScaleToSizeProportional(100, 100);
+        /// </code></example>
+        public static Bitmap ScaleToSizeProportional(this Bitmap bitmap, Color backgroundColor, int width, int height)
+        {
+            var scaledBitmap = new Bitmap(width, height);
+            using (var g = Graphics.FromImage(scaledBitmap))
+            {
+                g.Clear(backgroundColor);
+
+                var proportionalBitmap = bitmap.ScaleProportional(width, height);
+
+                var imagePosition = new Point
+                (
+                    (int)((width - proportionalBitmap.Width) / 2m),
+                    (int)((height - proportionalBitmap.Height) / 2m)
+                );
+
+                g.DrawImage(proportionalBitmap, imagePosition);
+            }
+
+            return scaledBitmap;
+        }
+
+        #endregion
+    }
+}
\ No newline at end of file