Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

В данном разделе представим пример, затем обсудим несколько вопросов, о которых необходимо знать при выводе изображений. Мы можем сделать это, так как код для вывода изображений очень прост.

Image MyImage = Image.FromFile("FileName"!);

FromFile
является статическим членом класса
Image
и обычным способом создает экземпляр изображения. Файл может быть любым из обычно поддерживаемых форматов графических файлов, включая
.bmp
,
.jpg
,
.gif
и
.png
.

Вывод изображения требует также только одну строку кода в предположении, что имеется подходящий экземпляр объекта

Graphics
:

dc.DrawImageUnscaled(MyImage, TopLeft);

В этой строке кода

dc
предполагается экземпляром объекта
Graphics
,
MyImage
является
Image
, который будет выведен, a
TopLeft
— структурой
Point
, которая хранит координаты устройства, где требуется поместить изображение. Трудно представить себе что-то более простое.

По всей вероятности, изображения являются областью, в которой разработчики знакомые с GDI, заметят наибольшие различия с GDI+. В GDI работа с изображениями была достаточно непредсказуемой. Вывод изображения включал несколько нетривиальных шагов. Если изображение задавалось как битовое, загрузка его была относительно простой, но загрузка любого другого типа файла включала последовательность вызовов объектов OLE. В действительности вывод загруженного изображения на экран включал получение для него дескриптора, выбор его в памяти контекста устройства и затем выполнение блочного переноса между контекстами устройств. Хотя контексты устройств и дескрипторы, по-прежнему находятся за сценой и понадобятся, если придется делать (ложное редактирование изображений в коде программы, простые задачи теперь погружены в объектную модель GDI+.

Мы проиллюстрируем процесс вывода изображения с помощью примера

DisplayImage
. Этот пример просто выводит файл
.jpg
в основном окне приложения. Чтобы упростить код, путь доступа файла
.jpg
жестко закодирован в приложении (поэтому при выполнении приложения необходимо изменить его в соответствии с местоположением файла на используемой системе). Выводимый файл
.jpg
является групповой фотографией участников встречи COMFest.

Как обычно в этой главе, проект

DisplayImage
является стандартным приложением Windows, созданным с помощью VisualStudio.NET. Мы добавляем следующее поле в класс
Form1
:

Image Piccy;

Затем загружаем файл в процедуру

InitializeComponent
.

private void InitializeComponent {

 this.components = new System.ComponentModel.Container;

 this.Size = new System.Drawing.Size(600, 400);

 this.Text = "Display COMFEst Image";

 this.BackColor = Color.White;

 Piccy =

Image.FromFile(@"C:\ProCSharp\Chapter21\Display Image\CF4Group.jpg");

 this.AutoScrollMinSize = Piccy.Size;

}

Отметим, что размер изображения в пикселях задается как его свойство

Size
, которое используется для задания области документа. Изображение выводится в методе
OnPaint
:

protected override void OnPaint(PaintEventArgs e) {

 Graphics dc = e.Graphics;

 dc.DrawImageUnscaled(Piccy, this.AutoScrollPosition);

 base.OnPaint(e);

}

Выбор

this.AutoScrollPosition
в качестве координатного устройства гарантирует, что окно будет прокручиваться правильно, при этом до начала прокручивания изображение будет располагаться с верхнего левого угла клиентской области.

Наконец, сделаем еще одно замечание об изменениях, сделанных в коде метода

Form1.Dispose
, созданном мастером:

public override void Dispose {

 base.Dispose;

 if (components != null) components.Dispose;

 Piccy.Dispose;

}

Удаление изображения, когда оно не требуется, является важной задачей, так как изображения обычно требуют много памяти. После вызова

Image.Dispose
экземпляр
Image
больше не ссылается на какое-либо реальное изображение и поэтому не может больше выводиться (если не будет загружено новое изображение).

Выполнение этого кода создает результат:

COMFest (www.comfest.co.uk) является неформальной группой разработчиков в Великобритании, которые встречаются для обсуждения самых новых технологий, обмена идеями и т. д. Снимок включает всех участников COMFest 4, за исключением автора этой главы, который фотографировал.

  • Читать дальше
  • 1
  • ...
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: