netlib.narod.ru< Назад | Оглавление | Далее >

Список изображений

В главе 12 мы начнем работать с элементами управления, в частности, с кнопками, метками и полосами прокрутки, а затем — с меню, списками, редактируемыми полями и т.д. Вы увидите, что на поверхности элемента управления в дополнение к тексту или вместо него можно размещать растровые изображения. И высший пилотаж: панели инструментов под меню приложений обычно состоят из строки небольших растровых изображений.

В пространстве имен System.Windows.Forms есть класс ImageList, упрощающий работу с наборами изображений. Список изображений — это гибкий массив объектов Image одинакового размера и цветового формата. Добавление изображений в объект ImageList (при помощи процесса, о котором я вкратце расскажу ниже) и доступ к ним аналогичны работе с массивом. При добавлении в объект ImageList изображениям не обязательно иметь одинаковый размер, и все же при извлечении из этого объекта они будут приведены к одному размеру.

Вот самые важные свойства класса ImageList.


Свойства ImageList (выборочно)



Тип Свойство Доступ

Size ImageSize Чтение/запись
ColorDepth ColorDepth Чтение/запись
Color TransparentColor Чтение/запись
ImageList.ImageCollection Images Чтение


Устанавливаемое по умолчанию значение свойства ImageSize — квадрат со стороной 16 пикселов; при добавлении изображений в список оно не изменяется автоматически. Возможно, вам потребуется задать его самостоятельно на основе размера добавляемых объектов Image и, вероятно, разрешения дисплея, с использованием которого выполняется программа.

Свойство ColorDepth — это член перечисления ColorDepth.


Перечисление ColorDepth



Член Значение

Depth4Bit 4
Depth8Bit 8
Depth16Bit 16
Depth24Bit 24
Depth32Bit 32


По умолчанию для свойства ColorDepth устанавливается значение Depth8Bit, и его требуется изменять вручную в зависимости от используемых изображений. К счастью, перечисление ColorDepth определено довольно рационально. Благодаря этому, если у вас есть объект Image (например, с именем image), который нужно поместить в список изображений, можно методом Image.GetPixelFormatSize получить формат его пикселов и число бит на пиксел и затем преобразовать результат в значение типа ColorDepth.

  imglst.ColorDepth = (ColorDepth)Image.GetPixelFormatSize(image.PixelFormat);

Знаю, что четвертое свойство с именем Images выглядит несколько устрашающе, так как его тип определен как ImageList.ImageCollection. Длинное имя означает лишь то, что это класс ImageCollection, определенный в классе ImageList. Обращаться к классу ImageCollection в приложении не нужно: чтобы задействовать его свойства и методы, достаточно сослаться на свойство Images — именно в нем хранятся все изображения объекта ImageList.

Функциональность свойства Images проявляется в ряде других классов пространства имен System.Windows.Forms. В главе 12 обсуждается свойство Controls класса Control, тип которого — Control.ControlCollection. В главе 14 — свойство MenuItems класса Menu с типом Menu.MenuItemCollection. Все эти свойства работают примерно одинаково. Типы всех этих свойств реализуют интерфейсы IList, ICollection и IEnumerable (определенные в пространстве имен System.Collections), которые позволяют данным свойствам работать как расширяемым массивам.

Для создания объекта типа ImageList вызывается конструктор по умолчанию.

  ImageList imglst = new ImageList();

Затем задаются значения свойств ImageSize и ColorDepth. Добавить объекты Image в список изображений позволяет один из следующих методов:


Методы ImageList.ImageCollection (выборочно)



void Add(Image image)
void Add(Image image, Color clrTransparent)
void Add(Icon icon)
void AddStrtp(Image image)


Поскольку эти методы определены в классе ImageList.ImageCollection, вызвать их можно через свойство Images объекта ImageList. На самом деле все гораздо проще, чем кажется:

  imglist.Images.Add(image);

Каждому добавляемому изображению назначается индекс, начиная с 0. Метод AddStrip добавляет несколько изображений, число которых зависит от ширины передаваемого методу изображения и ширины, определяемой свойством ImageSize.

Следующее свойство указывает число изображений в объекте ImageList.


Свойства ImageList.ImageCollection (выборочно)



Тип Свойство Доступ

int Count Чтение


Свойство Count можно использовать в выражениях так:

  imglst.Images.Count

Гораздо важнее то, что к свойству Images можно обращаться, как при работе с массивом. Выражение:

imglst.Images[2]

возвращает третий объект Image из списка изображений. Если список включает менее трех изображений, выражение вызывает исключение. Кроме того, индексы позволяют заменить изображение в списке:

  imglst.Images[3] = image;

Если же в списке меньше четырех изображений, это выражение вызовет исключение.

Можно также определить, присутствует ли конкретное изображение в списке, и получить его индекс.


Методы ImageList.ImageCollection (выборочно)



bool Contains(Image image)
int IndexOf(Image image)


Например, выражение:

  imglst.Images.IndexOf(image)

возвращает 2, если объект image — третий в списке, и -1, если его в списке нет.

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


Методы ImageList.ImageCollection (выборочно)



void RemoveAt(int index)
void Clear()


Как рассказывается в следующих главах, объект ImageList можно использовать совместно с различными элементами управления, в частности, с элементом управления ToolBar. Сам по себе ImageList — это удобный способ хранения нескольких изображений одинакового размера. Для вывода этих изображений класс ImageList предоставляет метод Draw.


Методы Draw класса ImageList



void Draw(Graphics grfx, Point pt, int index)
void Draw(Graphics grfx, int x, int y, int index)
void Draw(Graphics grfx, int x, int y, int cx, int cy, int index)


Заметьте: индекс изображения в списке — последний аргумент. Например, выражение:

  imglst.Draw(grfx, x, y, 1)

выводит второе изображение из списка.

Обращайте особое внимание на координаты, передаваемые методам Draw. Первые два метода принимают координаты точек в единицах измерения устройства (пикселах). Размер изображения основывается на свойстве ImageSize объекта ImageList и измеряется в пикселах. На эти два метода не влияют ни преобразование страницы, ни мировое преобразование! Координаты устройства предназначены для максимизации производительности, но на принтерах это приводит к эффекту почтовой марки. Третий метод Draw принимает координату, а также ширину и высоту в мировых координатах.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz