Mercurial > silverbladetech
view Chronosv2/source/Extensions/BitmapExtensions.cs @ 21:dfc81f8bb838
working version for sttocks except ui within metrowpf
author | adminsh@apollo |
---|---|
date | Tue, 20 Mar 2012 15:07:31 +0000 |
parents | 443821e55f06 |
children |
line wrap: on
line source
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 } }