A common error occurred in GDI +

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; } 
+4
source share
3 answers

It was a permission error. I had to provide appropriate permission to write to the directory in which I saved. Sometimes these are simple things. :)

From what I read, upon receiving this GDI + error, the first thing to check should be a resolution, since it is almost always an indicator of a security problem.

+4
source

Try overloading Save , which does not accept EncoderParameters as a parameter. It should work fine and create the modified image you are looking for.

0
source

I had this error once because I tried to save a Bitmap object in a locked file. We just see your method, but not how you use it.

I think there are several syntax problems in your code: you should use "using () {}" for all disabled objects in your code.

 using(Image imageToResize = Image.FromFile(pathToImage)) using(Image imageConvertedToBitmap = new Bitmap(width, height)) etc. { } 
0
source

Source: https://habr.com/ru/post/1337181/


All Articles