2D Graphics C#

//-----------------------------------------------------------------------
// 
//  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/].
// 
// John Gietzen
//-----------------------------------------------------------------------
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;
        }
    }
}