Mega Code Archive

 
Categories / C# / 2D Graphics
 

Image Resize

//http://blazingcms.codeplex.com/ //GNU General Public License version 2 (GPLv2) using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Drawing; using System.IO; namespace Blazing.Web.Util {     #region ImageResize CLASS     /// <summary>     /// Found: http://www.rntsoft.com/KB/aspnet/Thumbnail_Images.aspx     ///      /// ImageResize is a class that is based on an article that was obtained from     /// the URL http://www.devx.com/dotnet/Article/22079/0/page/3. I had to make     /// some minor changes to a couple of the properties, but otherwise it is very     /// much like the original article.     /// </summary>     public class ImageResize     {         #region Instance Fields         //instance fields         private double m_width, m_height;         private bool m_use_aspect = true;         private bool m_use_percentage = false;         private System.Drawing.Image m_src_image, m_dst_image;         private System.Drawing.Image m_image;         private ImageResize m_cache;         private Graphics m_graphics;         #endregion         #region Public properties         /// <summary>         /// gets of sets the File         /// </summary>         public System.Drawing.Image File         {             get { return m_image; }             set { m_image = value; }         }         /// <summary>         /// gets of sets the Image         /// </summary>         public System.Drawing.Image Image         {             get { return m_src_image; }             set { m_src_image = value; }         }         /// <summary>         /// gets of sets the PreserveAspectRatio         /// </summary>         public bool PreserveAspectRatio         {             get { return m_use_aspect; }             set { m_use_aspect = value; }         }         /// <summary>         /// gets of sets the UsePercentages         /// </summary>         public bool UsePercentages         {             get { return m_use_percentage; }             set { m_use_percentage = value; }         }         /// <summary>         /// gets of sets the Width         /// </summary>         public double Width         {             get { return m_width; }             set { m_width = value; }         }         /// <summary>         /// gets of sets the Height         /// </summary>         public double Height         {             get { return m_height; }             set { m_height = value; }         }         #endregion         #region Public Methods         /// <summary>         /// Returns a Image which represents a rezised Image         /// </summary>         /// <returns>A Image which represents a rezised Image, using the          /// proprerty settings provided</returns>         public virtual System.Drawing.Image GetThumbnail()         {             // Flag whether a new image is required             bool recalculate = false;             double new_width = Width;             double new_height = Height;             // Load via stream rather than Image.FromFile to release the file             // handle immediately             if (m_src_image != null)                 m_src_image.Dispose();             m_src_image = m_image;             recalculate = true;             // If you opted to specify width and height as percentages of the original             // image's width and height, compute these now             if (UsePercentages)             {                 if (Width != 0)                 {                     new_width = (double)m_src_image.Width * Width / 100;                     if (PreserveAspectRatio)                     {                         new_height = new_width * m_src_image.Height / (double)m_src_image.Width;                     }                 }                 if (Height != 0)                 {                     new_height = (double)m_src_image.Height * Height / 100;                     if (PreserveAspectRatio)                     {                         new_width = new_height * m_src_image.Width / (double)m_src_image.Height;                     }                 }             }             else             {                 // If you specified an aspect ratio and absolute width or height, then calculate this                  // now; if you accidentally specified both a width and height, ignore the                  // PreserveAspectRatio flag                 if (PreserveAspectRatio)                 {                     if (Width != 0 && Height == 0)                     {                         new_height = (Width / (double)m_src_image.Width) * m_src_image.Height;                     }                     else if (Height != 0 && Width == 0)                     {                         new_width = (Height / (double)m_src_image.Height) * m_src_image.Width;                     }                 }             }             recalculate = true;             if (recalculate)             {                 // Calculate the new image                 if (m_dst_image != null)                 {                     m_dst_image.Dispose();                     m_graphics.Dispose();                 }                 System.Drawing.Image bitmap = new Bitmap((int)new_width, (int)new_height);                 m_graphics = Graphics.FromImage(bitmap);                 m_graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;                 m_graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;                 m_graphics.DrawImage(m_src_image, 0, 0, bitmap.Width, bitmap.Height);                 m_dst_image = bitmap;                 // Cache the image and its associated settings                 m_cache = this.MemberwiseClone() as ImageResize;             }             return m_dst_image;         }         #endregion         #region Deconstructor         /// <summary>         /// Frees all held resources, such as Graphics and Image handles         /// </summary>         ~ImageResize()         {             // Free resources             if (m_dst_image != null)             {                 m_dst_image.Dispose();                 m_graphics.Dispose();             }             if (m_src_image != null)                 m_src_image.Dispose();         }         #endregion     }     #endregion }