I'm tracking down a pesky problem and I've narrowed down the problem down and realized it only happens when I'm dealing with an Image instance returned by Image.FromStream(). I have a utility method that returns an Image instance from a file using a Stream so I don't have the file handle left open. Here is that utility method (nothing special):
public static Image ImageFromFileReleaseHandle(string filename)
{
using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
return Image.FromStream(fs);
}
}
When I try to save an Image loaded from the above method I'm getting an InteropServices.ExternalException "A generic error occurred in GDI+.". The following code example will demonstrate this:
private void button6_Click(object sender, EventArgs e)
{
var filename = @"D:\My Documents\My Pictures\2010-03-27 hangover hike.jpg";
// Get an Image instance
Image image;
using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
image = Image.FromStream(fs);
}
// Save to a temp file - this is the code that throws the exception
image.Save(Path.GetTempFileName());
}
If I load the image using Image.FromFile() I can save no problem:
private void button6_Click(object sender, EventArgs e)
{
var filename = @"D:\My Documents\My Pictures\2010-03-27 hangover hike.jpg";
// Get an Image instance
Image image = Image.FromFile(filename);
// Save to a temp file - this is the code that throws the exception
image.Save(Path.GetTempFileName());
}
I can't think of any additional information that would be helpful. Hopefully my code examples are simple enough that you can clearly see the problem.
Thanks, Steve