Работа с файлом изображения

у меня при работе с картинками появилась проблема при

this.pictureBox1.Image = Image.FromFile("resours/image/printscreen.jpg");

после я не могу ничего делать с файлом printscreen.jpg и я получаю исключения The process cannot access the file "FilePath" because it is being used by another process , как мне залить картинку и после работать с файлом далее?


Ответы (2 шт):

Автор решения: Alex Krass

Документация о Image.FromFile говорит черным по белому, что файл изображения будет заблокирован пока Image не будет удален.

The file remains locked until the Image is disposed.

Вывод - не используйте его, если надо и дальше работать с файлом.

Используйте альтернативные методы, к примеру создать поток и уже из потока прочитать изображение Image.FromStream.

byte[] contents = File.ReadAllBytes("path/sample.jpg");
MemoryStream ms = new MemoryStream(contents);
Image img = Image.FromStream(ms);
→ Ссылка
Автор решения: Bulson

Вот пример открываем и показываем файл, а потом его можно удалить.

public partial class FormMain : Form
{
    //путь к открытому файлу
    private string _activePictureFile;

    public FormMain()
    {
        InitializeComponent();

        _buttonOpen.Click += ButtonOpen_Click;
        _buttonRemove.Click += ButtonRemove_Click;
    }

    private void ButtonOpen_Click(object sender, EventArgs e)
    {
        if (_openFileDialog.ShowDialog() != DialogResult.OK)
            return;

        //запоминаем путь к файлу
        _activePictureFile = _openFileDialog.FileName;
        //открываем файл через его копию в памяти
        var memStream = new MemoryStream(File.ReadAllBytes(_activePictureFile));
        _pictureBox.Image = Image.FromStream(memStream);
    }

    private void ButtonRemove_Click(object sender, EventArgs e)
    {
        if (MessageBox.Show("Удалить файл?", "Вопрос", MessageBoxButtons.YesNo) != DialogResult.Yes)
            return;

        //удаляем файл
        File.Delete(_activePictureFile);
    }
}
→ Ссылка