Главная » WPF » Обработка изображения примеры для WPF

0

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

В терминологии WPF  изображением  называется любой  класс,  производ ный от ImageSource.  Отличительными особенностями изображения являются наличие  размера  и необязательных метаданных.  В WPF почти  все посвящено растровым  изображениям, в первой версии нет формального понятия формата файла,  содержащего  векторное  изображение.  Однако  класс DrawingImage поз воляет  использовать в качестве изображения любой рисунок, а это уже начало полноценной векторной модели. Но мы пока сосредоточимся на растровых изображениях.

Основы изображений

Для начала рассмотрим два простейших  и наиболее распространенных спосо ба доступа к растровым изображениям. Класс Image представляет фигуру, инкап сулирующую  объект  ImageSource,  а класс  BitmapImage – это самый  употреби тельный  подкласс ImageSource для доступа к растровым изображениям.

<!— включение изображения в разметку —>

<Image Source=’some image.jpg’ />

// Код на языке C# для показа изображения

Image img = new Image();

img.Source = new BitmapImage(new Uri(«some image.jpg»));

Класс Image – это не более чем средство просмотра  объекта ImageSource;  вся суть системы работы с изображениями кроется в различных подтипах ImageSource.  С любым изображением ассоциирован естественный  размер; для растровых изображений это обычно число пикселей  по каждому измерению,  по деленная  на разрешающую  способность устройства  (число точек на дюйм), с по мощью которого изображение было получено. Когда объект Image выводит изоб ражение, он должен как то масштабировать его под размеры области просмотра, здесь то и приходит на помощь свойство Stretch.

Для векторных  фигур (о которых шла речь в предыдущем  разделе)  свойство Stretch управляет  тем, как фигура масштабирует составляющие ее векторы; то же самое относится  и к классу Image, инкапсулирующему свое содержимое. У свой ства Stretch есть два ключевых аспекта: направление (хотим ли мы сделать изоб ражение  больше, меньше или допустимо  то и другое?)  и тип. Как правило,  нап равление игнорируется, а вот тип представляет интерес. Есть четыре возможных значения  типа (рис. 5.22):

1.  None. Изображение масштабируется до естественного  размера и в области просмотра видно столько, сколько поместилось.

2.   Fill. Изображение масштабируется так, чтобы занять все доступное прост

ранство.

3.   Uniform. Изображение занимает всю ширину или высоту доступной облас

ти, при этом пропорции  сторон сохраняются.

4.   UniformToFill.  Изображение  занимает  все  доступное  пространство,  про

порции сторон сохраняются,  видно столько, сколько поместилось.

Конвейер из объектов ImageSource

Основная задача элемента управления Image состоит в том, чтобы модифици ровать внешнее представление изображения. Для этого служат свойства Stretch, RenderTransform, LayoutTransform, BitmapEffect (о нем чуть ниже) и ряд других. А что, если нам нужно изменить  исходное изобажение?

Рис. 5.23. Результирующее изображение после обработки конвейером

Image img =new Image();

img.Source = color;

Window w = new Window();

w.Content = img;

w.Title = «Image Pipeline»;

w.Show();

Обычно мы не пользуемся конвейером во всей его полноте, а ограничиваемся классом BitmapImage, производным от ImageSource,  который инкапсулирует на иболее употребительные функции обработки  изображений (декодирование раз мера, поворот и т.д.).

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

  • Комментарии