Простой способ загрузки рисунка и освобождения памяти !
Ниже приведен метод загрузки и одновременно освобождении памяти, который возвращает объект типа Image.public static Image LoadImage(string path)
{
using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(path)))
{
return Image.FromStream(ms);
}
}
- Здесь 'p' место расположения файла, Например C:\Image.jpg.
- MemoryStream - Создает поток, резервным хранилищем которого является память.
- MemoryStream(File.ReadAllBytes(p))- инициализирует новый экземпляр класса MemoryStream на основе указанного массива байтов.
- Image.FromStream(ms) -Создает изображение из указанного массива байтов.
Ниже приведен пример использования данного метода.
Необходимо создать проект типа WindowsApplication и назвать blogger_LoadImage или любое вам угодное имя.
В нашем примере нужны следующие пространства имен.
using System;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
На форму добавьте контрол типа Button и дайте имя btnOpen, также добавьте PictureBox со свойствами Name - pctImage; BackgroundImageLayout - Stretch.
А событие Click контрола btnOpen должно выглядеть следующим образом.
private void btnOpen_Click(object sender, EventArgs e)
{
OpenFileDialog filedlg = new OpenFileDialog();
filedlg.Filter = "Image files |*.jpg;*.png;*.bmp|All files | *.*"; //фильтр для выбираемых файлов
filedlg.CheckFileExists = true;
// При CheckFileExists=true вместо прерывания будет выдано сообщение, что такого файла нет и исключения не
//вызывается.
filedlg.CheckPathExists = true;
// Используется для получения или установки значения, указывающего отображать или нет диалоговое окно
//предупреждения, если пользователь указал в свойстве FileName имя файла с несуществующим именем директории
filedlg.Multiselect = false;
// при значении true позволяет выбрать мышкой при нажатой кнопке Shift или //Ctrl несколько файлов и сохранить их имена в свойстве FileNames в виде массива строк.
filedlg.Title = "Open Image"; //заголовок диалогового окна.
try
{
DialogResult dlg = filedlg.ShowDialog();
if (dlg = = DialogResult.OK)
{
pctImage.BackgroundImage = LoadImage(filedlg.FileName);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
public static Image LoadImage(string path)
{
using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(path)))
{
return Image.FromStream(ms);
}
}
}
}
Комментариев нет:
Отправить комментарий