Resize image gdi+ graphics .net
.net, c#, gdi+
Solution
Look at the documentation for Image.FromStream()
http://msdn.microsoft.com/en-us/library/93z9ee4x.aspx
You need to keep the stream open for the lifetime of the Image. Keep the first MemoryStream open longer, and it should work.
Problem
I have this method for shrinking down an image for a website that I'm working on: ``` static byte[] createSmallerImage( BlogPhoto blogPhoto, int newMaxWidth, int newMaxHeight) { Image img; using (MemoryStream originalImage = new MemoryStream(blogPhoto.BlogPhotoImage)) { img = Image.FromStream(originalImage); } int newWidth; int newHeight; byte[] arr; if (img.Width > img.Height) { if (img.Width <= newMaxWidth) { using (MemoryStream thumbStr = new MemoryStream()) { img.Save(thumbStr, ImageFormat.Jpeg); img.Dispose(); arr = thumbStr.ToArray(); } return arr; } newWidth = newMaxWidth; newHeight = (int)(((float)newWidth / (float)img.Width) * (float)img.Height); } else { if (img.Height <= newMaxHeight) { using (MemoryStream thumbStr = new MemoryStream()) { img.Save(thumbStr, ImageFormat.Jpeg); img.Dispose(); arr = thumbStr.ToArray(); } return arr; } newHeight = newMaxHeight; newWidth = (int)(((float)newHeight / (float)img.Height) * (float)img.Width); } Image thumb = new Bitmap(newWidth, newHeight); Graphics g = Graphics.FromImage(thumb); g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.SmoothingMode = SmoothingMode.HighQuality; g.PixelOffsetMode = PixelOffsetMode.HighQuality; g.CompositingQuality = CompositingQuality.HighQuality; g.DrawImage(img, 0f, 0f, (float)newWidth, (float)newHeight); using (MemoryStream thumbStr = new MemoryStream()) { thumb.Save(thumbStr, ImageFormat.Jpeg); arr = thumbStr.ToArray(); } g.Dispose(); img.Dispose(); return arr; } ``` Most of the time it works great but sometimes it gives me this exception:A generic error occurred in GDI+. Error Code -2147467259. Source: "System.Drawing". This occurs on the Image.Save(... I tried to make this code as defensive as possible but am still not getting whats causing this. If someone knows the answer that'd be great, critiques are welcome too.