I am trying to resize and image using the following function and get this error:
Exception Details: System.Runtime.InteropServices.ExternalException: A general error occurred in GDI +.
in this line:
imageConvertedToBitmap.Save(cachedFileName, info[1], encoderParameters);
Any ideas why this could be happening?
private byte[] GetCachedImage(string cachedFileName, string pathToImage, int width, int height) { if (!System.IO.File.Exists(cachedFileName) || (System.IO.File.GetLastWriteTime(pathToImage) > System.IO.File.GetLastWriteTime(cachedFileName))) { Image imageToResize = Image.FromFile(pathToImage); Image imageConvertedToBitmap = new Bitmap(width, height); Graphics graphicsController = Graphics.FromImage(imageConvertedToBitmap); graphicsController.InterpolationMode = InterpolationMode.HighQualityBicubic; graphicsController.SmoothingMode = SmoothingMode.HighQuality; graphicsController.PixelOffsetMode = PixelOffsetMode.HighQuality; graphicsController.CompositingQuality = CompositingQuality.HighQuality; graphicsController.DrawImage(imageToResize, 0, 0, width, height); EncoderParameters parameters = new EncoderParameters(1); parameters.Param[0] = new EncoderParameter(Encoder.Quality, 80L); ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders(); EncoderParameters encoderParameters = new EncoderParameters(1); encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 80L); MemoryStream memoryStream = new MemoryStream(); imageConvertedToBitmap.Save(cachedFileName, info[1], encoderParameters); imageConvertedToBitmap.Save(memoryStream, info[1], encoderParameters); imageToResize.Dispose(); imageConvertedToBitmap.Dispose(); graphicsController.Dispose(); parameters.Dispose(); encoderParameters.Dispose(); return memoryStream.GetBuffer(); } byte[] buffer = null; try { FileStream fileStream = new FileStream(cachedFileName, FileMode.Open, FileAccess.Read); BinaryReader binaryReader = new BinaryReader(fileStream); long totalBytes = new FileInfo(cachedFileName).Length; buffer = binaryReader.ReadBytes((Int32)totalBytes); fileStream.Close(); fileStream.Dispose(); binaryReader.Close(); } catch { } return buffer; }
Scott source share