This is a code in C# to resize an image. it takes two inputs as target image size and the image in byte format and it'll will return target sized image.
Some terms used in the code:- Format24bppRgb - It specifies that formate is 24 bit per pixel and for each colour that is red, green and blue 8 bits are used
using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO;
public class ImageClass { private static byte[] ResizeImageFile(byte[] imageFile, int targetSize) { using (System.Drawing.Image oldImage = System.Drawing.Image.FromStream(new MemoryStream(imageFile))) { Size newSize = CalculateDimensions(oldImage.Size, targetSize);//User defined function to calculate image dimensions using (Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb)) { using (Graphics canvas = Graphics.FromImage(newImage)) { canvas.SmoothingMode = SmoothingMode.AntiAlias;//set rendering quality of canvas canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;//set interpolation mode to HighQualityBiubic canvas.PixelOffsetMode = PixelOffsetMode.HighQuality; canvas.DrawImage(oldImage, new Rectangle(new Point(0, 0), newSize));//drow image in canvas with new size and with specific starting location MemoryStream m = new MemoryStream(); newImage.Save(m, ImageFormat.Jpeg);//define image formate in which it is to be shown return m.GetBuffer();//return image as byte array } } } }
private static Size CalculateDimensions(Size oldSize, int targetSize) { Size newSize = new Size();
//change the size according to the widh and height if (oldSize.Height > oldSize.Width) { newSize.Width = (int)(oldSize.Width * ((float)targetSize / (float)oldSize.Height)); newSize.Height = targetSize; } else { newSize.Width = targetSize; newSize.Height = (int)(oldSize.Height * ((float)targetSize / (float)oldSize.Width)); } return newSize; } }
|
| Author: David Kearfott 18 Nov 2009 | Member Level: Bronze Points : 1 |
This is terrific. Thanks for posting. Quick question: my resized images appear to have a thin border around each one. Is there any way to remove this?
Thanks, david
|
| Author: David Kearfott 18 Nov 2009 | Member Level: Bronze Points : 2 |
Hi there, I was able to fix my own problem by following the recommendations in this post: http://www.codeproject.com/KB/GDI-plus/imgresizoutperfgdiplus.aspx which suggested to provide some ImageAttributes. This meant I had to use a different signature when calling DrawImage, as follows (I'm now passing in the origWidth and origHeight):
System.Drawing.Imaging.ImageAttributes attr = new System.Drawing.Imaging.ImageAttributes();
attr.SetWrapMode(System.Drawing.Drawing2D.WrapMode.TileFlipXY);
canvas.DrawImage(oldImage, new Rectangle(new Point(0, 0), newSize), 0, 0, origWidth, origHeight, GraphicsUnit.Pixel, attr);
attr.Dispose();
Thanks, david
|