Новость из категории: Информация

Графика в Ultimate++: растровые изображения

Содержание:
1. Графика;
2. Растровые изображения (Вы читаете данный раздел);
3. Другие возможности U++;
4. Выводы.
Графика в Ultimate++: растровые изображения

Инфраструктура для работы с растровыми изображениями в U++ мощная, но довольно сложная, поэтому описать ее детально в небольшой статье невозможно. Для низкоуровневого попиксельного доступа предусмотрен класс ImageBuffer, который хранит двумерный массив точек типа RGBA:
ImageBuffer ib(50, 50); // Создаем буфер 50х50
for(int y = 0; y r = 4 * x;
l->g = 4 * y;
l->b = 200;
// Следующий пиксел
}
}
Premultiply(ib); // Применить прозрачность

Буферы нельзя отобразить непосредственно, но можно установить их в объектах Image и отобразить на холсте методом DrawImage:
Image image = ib; // Присвоить буфер объекту изображения
w.DrawImage(140, 15, im);
w.DrawImage(165, 25, im);

Графика в Ultimate++: растровые изображения

Такой вызов отобразит наложение двух полупрозрачных квадратов (см. рис. выше).

Загрузка графических файлов в объекты типа Image осуществляется с помощью различных классов, унаследованных от StreamRaster. Простейший вариант, в котором тип файла определяется автоматически, выглядит так:
Image img = StreamRaster::LoadFileAny(file _ name);

При неудаче метод возвращает NULL, что позволяет не делать дополнительных проверок на наличие файла и его формат.

Дизайнер изображений

Пока что работа с графикой в U++ выгладит стандартно и неинтересно, однако все кардинально меняется когда, речь заходит о загрузке изображений для пользовательского интерфейса, а именно: иконок, логотипов и т.п. Идеология, используемая для работы с этими данными, аналогична идеологии схем баз данных и компоновок виджетов. Создается специальный .iml-файл, который содержит набор обычных макросов С++ и включается непосредственно в код программы директивой #include. Этот файл содержит все данные иконок в текстовом виде. При включении .iml-файла из них автоматически создаются объекты Image. Все преобразования осуществляются на стадии компиляции т.е. никакой работы по загрузке рисунков из файлов во время выполнения вообще не происходит, а рисунки становятся бинарными ресурсами, включенными в тело программы.

Графика в Ultimate++: растровые изображения

Создадим в TheIDE новый файл с именем images.iml. Он немедленно откроется в специальном дизайнере изображений, который представляет собой довольно мощный растровый графический редактор, ориентированный на создание иконок (см. рис. выше). В каждом .iml-файле может быть любое количество иконок. Их можно как создавать с нуля, так и загружать готовые из файлов.

Для того чтобы включить .iml-файл в программу, нужно написать перед объявлением класса главного окна:
#define IMAGECLASS MyImages
#define IMAGEFILE
#include

Семантика в точности повторяет включение файлов .lay и .scm, рассмотренных в предыдущих статьях. Глобальный тип IMAGECLASS используется для автоматической генерации «служебного» кода, а заголовок содержит необходимые для этого объявления. В результате, в программе становится доступен статический класс с именем MyImages с методами, которые имеют те же имена, что и иконки в дизайнере изображений. Эти методы возвращают ссылки на объекты Image, который можно сразу же использовать. Например, чтобы отобразить иконку с именем exit, достаточно написать:
w.DrawImage(350, 150, MyImages: :exit());

Объект MyImages одновременно является массивом. Метод Get(i) возвращает i-тое изображение, а метод Getld(i) - его текстовый идентификатор.

Таким образом, включение .iml-файлов играет ту же роль, что включение бинарных ресурсов в других тулкитах, но выполняется гораздо более элегантно средствами самого С++, без каких-либо сторонних «компиляторов ресурсов».



Вас гораздо больше волнует здоровье вашего домашнего питомца, чем растровые изображения в Ultimate++? Ну, в таком случае Вам будет интересно узнать, что вакцинация собак (http://helvet.ru/catalog/evinton/articles/1101) должна производится исключительно ветеринарами с высокой квалификацией. Узнать подробности Вы сможете на helvet.ru.

Рейтинг статьи

Оценка
0/5
голосов: 0
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Похожие новости

Комментарии

^ Наверх