Работа с файлом изображения
у меня при работе с картинками появилась проблема при
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 шт):
Документация о 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);
Вот пример открываем и показываем файл, а потом его можно удалить.
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);
}
}