Аппаратно-зависимые точечные рисунки (DDB)


Аппаратно-зависимые точечные рисунки (DDB) используют для своего описания единственную структуру, это структура BITMAP. Члены этой структуры устанавливают ширину и высоту прямоугольной области, в пикселях; ширину массива, который отображает записи из палитры устройства в пикселях; и цветовой формат устройства, в единицах количества цветовых плоскостей и битов на пиксель. Приложение может извлечь данные о цветовом формате устройства при помощи вызова функции GetDeviceCaps и определения соответствующих констант. 

Обратите внимание! на то, что аппаратно-зависимый растровый формат (DDB) не содержит кодов цвета; вместо этого, цвета находятся в аппаратно-зависимом формате. 

Для получения дополнительной информации, см. статью Цвет в точечных рисунках. Поскольку каждое устройство может иметь свой  собственный набор цветов, формат DDB, созданный для одного устройства не может качественно отобразить рисунок на другом устройстве.

Чтобы использовать формат DDB в контексте устройства, он должен иметь организацию цвета этого контекста устройства. Поэтому, аппаратно-зависимый растровый формат (DDB) часто называется совместимым точечным рисунком (compatible bitmap) и обычно имеет производительность в GDI выше, чем аппаратно-независимый растровый формат (DIB). Например, чтобы создать точечный рисунок для видеопамяти, лучше использовать совместимый точечный рисунок с тем же цветовым форматом, что и у основного дисплея. В видеопамяти же, точечный рисунок передается и показывается  на экране значительно быстрее, чем он будет показан из оперативной памяти или непосредственно из формата DIB.

В дополнение к получению возможности иметь лучшую  производительность в GDI, совместимые точечные рисунки используются, чтобы захватывать изображения (см. статью Захват изображения) и создавать точечные рисунки во время выполнения программы для меню (см. Создание точечного рисунка).

Чтобы перемещать точечный рисунок между устройствами с различной организацией цвета, используйте функцию GetDIBits, которая преобразует совместимый точечный рисунок в аппаратно-независимый растровый формат (DIB) и вызовите функцию SetDIBits или StretchDIBits, чтобы показать на экране рисунок DIB на втором устройстве.

Существует два типа растровых форматов DDB: удаляемый из памяти (незащищенный) и не удаляемый из памяти (защищенный). Незащищенный растровый формат (DDB) - это точечный рисунок, который система отвергает, если он не выбран в контекст устройства (DC) и, если недостаточно оперативной памяти. Функция CreateDiscardableBitmap создает незащищенные точечные рисунки. Функции CreateBitmap, CreateCompatibleBitmap и CreateBitmapIndirect создают защищенный точечный рисунок.

Приложение может создать аппаратно-зависимый точечный рисунок DDB из аппаратно-независимого точечного рисунка DIB, инициализируя необходимые структуры и вызывая функцию CreateDIBitmap. Определение флажка CBM_INIT при вызове CreateDIBitmap эквивалентно вызову функции CreateCompatibleBitmap, чтобы создать растровый рисунок DDB в формате устройства, а затем вызов функции SetDIBits, чтобы преобразовать биты аппаратно-независимого  точечного рисунка DIB  в аппаратно-зависимый растровый формат (DDB). Чтобы выяснить, поддерживает ли устройство функцию SetDIBits, вызовите функцию GetDeviceCaps, определяя RC_DI_BITMAP как флажок RASTERCAPS.

Назад в оглавление
На главную страницу

Hosted by uCoz