Following code draws an image scaled to a given rectangle, keeping the aspect ratio and centering the scaled image inside the rectangle using GDI+
Graphics.DrawImage(image, FitToRect(this.ClientRectangle, image.Size));
/// <summary>
/// Fit the given src Size to the target Rectangle keeping the aspect
/// ratio and centering the src inside the rectangle
/// </summary>
/// <param name="target"></param>
/// <param name="src"></param>
/// <returns></returns>
static public Rectangle FitToRect(Rectangle target, Size src)
{
// Find the scale to fit the Src to the Target height
float sfh = (float)target.Height/(float)src.Height;
// Find the scale to fit the Src to the Target width
float sfw = (float)target.Width/(float)src.Width;
// Smaller of the 2 is the fit to view scale factor
float sf = Math.Min(sfh, sfw);
// Find the size of the Src scaled to fit the target rectangle
Size sizeToFit = new Size((int)Math.Round((double)src.Width*sf),
(int)Math.Round((double)src.Height*sf) );
Poiny loc = new Point((target.Width-sizeToFit.Width)/2,
(target.Height-sizeToFit.Height)/2);
// Now centre the scaled src size in the rectangle
Rectangle rect = new Rectangle(loc, sizeToFit);
return rect;
}
No comments:
Post a Comment