I have this JPEG image, that opens fine in Picasa, Photoshop, web browser, etc., but in .NET it just refuses to work.
Image image = Image.FromFile(@"myimage.jpg");
image.Save(@"myimage2.jpg");
// ExternalException - A generic error occurred in GDI+.
Is there a way to recover it in .NET so I can work with it (I need to resize it), without fixing the problem at the source?
Full exception details:
source: System.Drawing type: System.Runtime.InteropServices.ExternalException message: A generic error occurred in GDI+. stack trace: at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams) at System.Drawing.Image.Save(String filename, ImageFormat format) at System.Drawing.Image.Save(String filename) at ConsoleApplication20.Program.Main(String[] args) in C:\Users\sam\Desktop\S ource\ConsoleApplication20\ConsoleApplication20\Program.cs:line 16
This issue is reproducible on Windows 7.
Save a picture or other image as a separate fileControl-click the illustration that you want to save as a separate image file, and then click Save as Picture. In the Save as type list, select the file format that you want. In the Save As box, type a new name for the picture, or just accept the suggested file name.
This seems to work:
using (Image image = Image.FromFile(@"c:\dump\myimage.jpg"))
using (Image clone = new Bitmap(image))
{
clone.Save(@"c:\dump\myimage2.jpg", ImageFormat.Jpeg);
}
image
is actually a Bitmap
anyway, so it should be similar. Oddly myimage2
is 5k smaller - the joys of jpeg ;-p
A nice thing about this is that you can resize at the same time (your actual intent):
using (Image image = Image.FromFile(@"c:\dump\myimage.jpg"))
using (Image clone = new Bitmap(image,
new Size(image.Size.Width / 2, image.Size.Height / 2)))
{
clone.Save(@"c:\dump\myimage2.jpg", ImageFormat.Jpeg);
}
Try explicitly specifying the format:
using (Image image = Image.FromFile(@"test.jpg"))
{
image.Save(@"myimage2.gif", ImageFormat.Gif);
}
All ImageFormat.Png
, ImageFormat.Bmp
and ImageFormat.Gif
work fine. ImageFormat.Jpeg
throws an exception.
The original image is in the JFIF
format as it starts with FF D8 FF E0
bytes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With