Ошибка File.Delete при вызове Image.FromFile перед этим, несмотря на создание копии загруженного изображения и уничтожение исходного

UPDATED

Я использовал нижеприведенные решения (загрузка изображения из потока), но получил новую проблему. Объект img абсолютно правильный экземпляр класса изображения со всем полем, заполненным правильными значениями. Но при вызове

img.Save("path/to/new/image.bmp");

в нем приводит к новому исключению для GDI + (System.Runtime.InteropServices.ExternalException, в интерфейсе GDI +) - я получаю сообщение об ошибке, но на польском языке, я не знаю, как его перевести.

Исходный вопрос

У меня проблема с C # .NET Framework 2.0

В основном я пытаюсь добиться:

Image img = Image.FromFile("Path/To/Image.bmp");
File.Delete("Path/To/Image.bmp"); // Exception, the file is in use!

Для меня важно сохранить копию изображения в памяти, когда исходный файл был удален. Мне кажется странным, что .NET все еще блокирует файл на жестком диске, несмотря на то, что он больше не требуется для каких-либо операций (весь образ теперь находится в памяти, не так ли?)

Поэтому я попробовал это решение:

Image img = new Image(Image.FromFile("Path/To/Image.bmp")); // Make a copy
                    // this should immiedietaly destroy original loaded image
File.Delete("Path/To/Image.bmp"); // Still exception: the file is in use!

Я могу:

Image img = null;
using(Image imgTmp = Image.FromFile("Path/To/Image.bmp"))
{
    img = new Bitmap(imgTmp.Width, imgTmp.Height, imgTmp.PixelFormat);
    Graphics gdi = Graphics.FromIage(img);
    gdi.DrawImageUnscaled(imgTmp, 0, 0);
    gdi.Dispose();
    imgTmp.Dispose(); // just to make sure
}
File.Delete("Path/To/Image.bmp"); // Works fine
// So I have img!

Но мне кажется, что это похоже на использование ядерной бомбы для уничтожения ошибки ... и возникает другая проблема: GDI плохо поддерживает рисование изображений на основе палитры друг на друге (а палитры составляют большинство в моей коллекции).

Я что-то не так делаю? Есть ли лучший способ сохранить изображение в памяти, а исходный файл удалить с жесткого диска?

9
задан PiotrK 7 September 2010 в 19:41
поделиться