Растровые изображения, пиктограммы и метафайлы, страница 2

LONG      biXPelsPerMeter;     // 0 или необязательное значение разрешения по

// горизонтали

LONG      MYPelsPerMeter;     // 0 или необязательное значение разрешения по

// вертикали

DWORD    biClrUsed;               // Обычно 0, может быть меньше biBitCount

DWORD    biClrImportant;       // Обычно О } BITMAPINFOHEADER,   *LPBITMAPINFOHEADER;

После структуры BITMAPINFOHEADER в формате DIB должна находиться та( лица цветов. Это — набор структур данных RGBQUAD, которые содержат код цве та RGB для каждого из цветов, применяемых в растровом изображении. В формат DIB должно быть представлено столько входов RGBQUAD, сколько вариантов цве тов находится в растровом изображении. Ниже приведено определение структур RGBQUAD:

typedef  struct  tagRGBQOAD {

BYTE  rgbBlue;

BYTE  rgbGreen;

BYTE  rgbRed;

BYTE  rgbReserved; } RGBQUAD;

В Windows предусмотрена альтернатива определению цветов растрового изображения с помощью кодов цвета RGB. Таблица цветов может представлять собой массив К разрядных целых чисел без знака. Каждое из этих чисел является индексом, реализованной в настоящее время логической палитры. Применение значений индексе палитры позволяет менять цвета растрового изображения путем смены палитры. Не сколько функций работы с форматом DIB включают параметр uUsage, значение которого может быть установлено равным DIB_PAL_COLORS, если таблица цветов содержит элемент палитры. Коды цветов RGB должны использоваться, если растровое изображение предназначено для хранения на диске и потенциального использования н каком-то другом типе устройства, которое может иметь другую цветовую разрешающую способность.

В листинге 13.2 приведен пример загрузки данных цвета из изображения DIB, затем вывода растрового изображения. В этом примере предполагается, что растре вое изображение формата DIB с именем PEN.BMP входит в состав файла описании: ресурса, как показано в листинге 13.1. Данные цвета из файла DIB считываются преобразуются в логическую палитру при обработке сообщения WM_CREATE. Это сложная процедура, поскольку в программе необходимо рассчитать, сколько значений цвета хранится вместе с растровым изображением. Обратите внимание, что логическая палитра создается в процессе обработки сообщения WM_CREATE, но не смотря на это она не реализуется до тех пор, пока не будет получено сообщении WM_PAINT.

Для вывода растрового изображения применяется функция SetDIBitsToDevice. Пр1 вызове этой функции должен быть задан указатель и на данные BITMAPINFO, и н; данные растрового изображения DIB. Последний параметр рассчитывается как смещение от начала данных BITMAPINFO, поскольку в данных ресурса шестнадцатеричные данные растрового изображения загружены непосредственно за окончанием дан ных цвета.

Листинг 13,2. Пример загрузки растрового изображения DIB

См. \local-sources\chapl3\tl3-02.txt

Пиктограммы

Пиктограммы — это небольшие растровые изображения, применяемые в Windows для визуального представления таких объектов, как приложения, файлы и каталоги. В системе Windows пиктограммы можно видеть во всех компонентах пользовательского интерфейса.

Использование пиктограмм

Приложения Windows 2000 и Windows 98 должны иметь по меньшей мере одну пиктограмму и поддерживать пиктограммы с тремя разными размерами: большую пиктограмму с 256 цветами (48x48), пиктограмму с 16 цветами (32x32) и малую пиктограмму с 16 цветами (16x16). Малая пиктограмма отображается, когда приложение свернуто; кроме того она присутствует в левом верхнем углу окна приложения. Большая пиктограмма отображается на рабочем столе и в представлениях объектов. Дополнительные пиктограммы должны быть созданы для каждого типа данных, поддерживаемых приложением.

Пиктограммы, как и растровые изображения, обычно создаются с использованием редактора изображений SDK Image Editor Win32 или редактора пиктограмм Visual C++. Затем эти пиктограммы можно ввести в файл описания ресурса приложения с помощью оператора ICON. Типичным примером использования пиктограмм является регистрация класса главного окна. В листинге 13.3 показано, как зарегистрировать класс окна с большой и малой пиктограммами.