//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.codeproject.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 }