Аппаратно-зависимые точечные рисунки (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.