Mega Code Archive

 
Categories / C# / 2D Graphics
 

Resize image to fit

//----------------------------------------------------------------------- // <copyright file="ImageUtilities.cs" company="LAN Lordz, inc."> //  Copyright Â© 2010 LAN Lordz, inc. // //  This file is part of The LAN Lordz LAN Party System. // //  The LAN Lordz LAN Party System is free software: you can redistribute it and/or modify //  it under the terms of the GNU General Public License as published by //  the Free Software Foundation, either version 3 of the License, or //  (at your option) any later version. // //  The LAN Lordz LAN Party System is distributed in the hope that it will be useful, //  but WITHOUT ANY WARRANTY; without even the implied warranty of //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the //  GNU General Public License for more details. // //  You should have received a copy of the GNU General Public License //  along with The LAN Lordz LAN Party System.  If not, see [http://www.gnu.org/licenses/]. // </copyright> // <author>John Gietzen</author> //----------------------------------------------------------------------- namespace LanLordz.SiteTools {     using System;     using System.Collections.Generic;     using System.Linq;     using System.Text;     using System.IO;     using System.Drawing;     using System.Drawing.Drawing2D;     using System.Drawing.Imaging;     public static class ImageUtilities     {         public static byte[] ResizeToFit(byte[] imageData, Size size, bool expand)         {             try             {                 using (MemoryStream ms = new MemoryStream(imageData))                 {                     using (Image img = Image.FromStream(ms))                     {                         if (size.Width == img.Width &&                             size.Height == img.Height)                         {                             return imageData;                         }                         var width = (float)size.Width;                         var height = (float)size.Height;                         var xRatio = width / img.Width;                         var yRatio = height / img.Height;                         var ratio = Math.Min(xRatio, yRatio);                         // If we are not expanding the image to fit and the resulting ratio indicates expansion, do not transform the image.                         if (!expand && ratio >= 1.0f)                         {                             return imageData;                         }                         var newSize = new Size(Math.Min(size.Width, (int)Math.Round(img.Width * ratio, MidpointRounding.AwayFromZero)), Math.Min(size.Height, (int)Math.Round(img.Height * ratio, MidpointRounding.AwayFromZero)));                         // Invialidate internally stored thumbnails.                         img.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);                         img.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);                         var newImage = new Bitmap(newSize.Width, newSize.Height);                         using (var g = Graphics.FromImage(newImage))                         {                             g.SmoothingMode = SmoothingMode.HighQuality;                             g.InterpolationMode = InterpolationMode.HighQualityBicubic;                             g.PixelOffsetMode = PixelOffsetMode.HighQuality;                             g.DrawImage(img, new Rectangle(new Point(0, 0), newSize));                         }                         using (MemoryStream outStream = new MemoryStream(1024))                         {                             newImage.Save(outStream, ImageFormat.Jpeg);                             return outStream.ToArray();                         }                     }                 }             }             catch             {                 return imageData;             }         }         public static string GetImageMimeType(byte[] imageData)         {             String mimeType = "image/unknown";             try             {                 Guid id;                 using (MemoryStream ms = new MemoryStream(imageData))                 {                     using (Image img = Image.FromStream(ms))                     {                         id = img.RawFormat.Guid;                     }                 }                 if (id == ImageFormat.Png.Guid)                 {                     mimeType = "image/png";                 }                 else if (id == ImageFormat.Bmp.Guid)                 {                     mimeType = "image/bmp";                 }                 else if (id == ImageFormat.Emf.Guid)                 {                     mimeType = "image/x-emf";                 }                 else if (id == ImageFormat.Exif.Guid)                 {                     mimeType = "image/jpeg";                 }                 else if (id == ImageFormat.Gif.Guid)                 {                     mimeType = "image/gif";                 }                 else if (id == ImageFormat.Icon.Guid)                 {                     mimeType = "image/ico";                 }                 else if (id == ImageFormat.Jpeg.Guid)                 {                     mimeType = "image/jpeg";                 }                 else if (id == ImageFormat.MemoryBmp.Guid)                 {                     mimeType = "image/bmp";                 }                 else if (id == ImageFormat.Tiff.Guid)                 {                     mimeType = "image/tiff";                 }                 else if (id == ImageFormat.Wmf.Guid)                 {                     mimeType = "image/wmf";                 }             }             catch             {             }             return mimeType;         }     } }