Я выслеживаю неприятную проблему, сузил ее и понял, что это происходит только тогда, когда я имею дело с экземпляром Image, возвращенным Image.FromStream (). У меня есть служебный метод, который возвращает экземпляр Image из файла, используя Stream, поэтому у меня нет открытого дескриптора файла. Вот этот служебный метод (ничего особенного):
public static Image ImageFromFileReleaseHandle(string filename)
{
using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
return Image.FromStream(fs);
}
}
Когда я пытаюсь сохранить изображение, загруженное из вышеуказанного метода, я получаю InteropServices.ExternalException «Общая ошибка произошла в GDI +». Следующий пример кода продемонстрирует это:
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());
}
Если я загружаю изображение с помощью Image.FromFile (), я могу сохранить без проблем:
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());
}
Я не могу придумать какую-либо дополнительную информацию, которая была бы полезна. Надеюсь, мои примеры кода достаточно просты, чтобы вы могли ясно увидеть проблему.
Спасибо,
Стив