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