Функция CreateDIBSection создает аппаратно-независимый растровый формат (DIB), который приложения могут записывать непосредственно. Функция дает Вам указатель на расположение значений битов растра. Вы можете поставить дескриптор объекта "проекция файла в память", который функция использует для создания точечного рисунка, или Вы можете дать возможность системе выделить память для него.
Синтаксис
HBITMAP CreateDIBSection( HDC hdc, // дескриптор DC CONST BITMAPINFO *pbmi, // данные точечного рисунка UINT iUsage, // индикатор типа данных VOID **ppvBits, // значения битов HANDLE hSection, // дескриптор объекта "проекция файла" DWORD dwOffset // смещение значений битов рисунка ); |
Параметры
hdc
[in] Дескриптор контекста устройства. Если значение iUsage равно DIB_PAL_COLORS, функция использует логическую палитру этого контекста устройства, чтобы инициализировать цвета аппаратно-независимого растрового формата (DIB).pbmi
[in] Указатель на структуру BITMAPINFO, которая устанавливает различные атрибуты аппаратно-независимого растрового формата (DIB), включая в себя размеры и цвета точечного рисунка.iUsage
[in] Определяет тип данных, содержащихся в члене массива bmiColors структуры BITMAPINFO, на которую указывает параметр pbmi (или индексы логической палитры или буквенные значения RGB). Устанавливаются нижеследующее значения.Значение | Предназначение |
---|---|
DIB_PAL_COLORS | Член bmiColors является массивом 16-битовых индексов в логической палитре контекста устройства, заданного параметром hdc. |
DIB_RGB_COLORS | Структура BITMAPINFO содержит массив точных значений RGB. |
ppvBits
[out] Указатель на переменную, которая получает указатель на местоположение битовых значений аппаратно-независимого растрового формата (DIB).hSection
[in] Дескриптор объекта "проекция файла в память", который функция использует для создания аппаратно-независимого растрового формата (DIB). Этим параметром может быть значение ПУСТО (NULL).Если hSection - не ПУСТО (NULL), тогда это должен быть дескриптор объекта "проекция файла в память", созданного при помощи вызова функции CreateFileMapping с флажком PAGE_WRITECOPY или PAGE_READWRITE. Разделы аппаратно-независимого растрового формата (DIB) только для чтения не поддерживаются. Дескрипторы, созданные другим способом становятся причиной завершения функции CreateDIBSection ошибкой.
Если hSection - не ПУСТО (NULL), функция CreateDIBSection определяет место значений битов растра при смещении dwOffset в объекте "проекция файла в память", на который ссылается параметр hSection. Приложение может позже извлечь дескриптор hSection при помощи вызова функции GetObject с типом HBITMAP, возвращенным CreateDIBSection.
Если hSection - значение ПУСТО (NULL), система выделяет память для аппаратно-независимого растрового формата (DIB). В этом случае, функция CreateDIBSection игнорирует параметр dwOffset . Приложение не может позже получить дескриптор этого блока памяти. Член dshSection структуры DIBSECTION, который заполняется при помощи вызова функции GetObject, должен иметь значение ПУСТО (NULL).
dwOffset
[in] Определяет смещение от начала объекта "проекция файла в память" на который ссылается параметр hSection, где должна начаться память для значений битов растра . Это значение игнорируется, если hSection имеет значение ПУСТО (NULL). Значения битов растра выравниваются по границам двойного слова, так что dwOffset должен быть кратный размеру DWORD (ДВОЙНОГО СЛОВА).Возвращаемые значения
Если функция завершается успешно, возвращаемое значение - дескриптор недавно созданного аппаратно-независимого растрового формата (DIB), а *ppvBits указывает на значения битов растра.
Если функция завершается ошибкой, возвращаемое значение - ПУСТО (NULL) и параметр *ppvBits - ПУСТО (NULL).
Windows NT/2000/XP: Чтобы получать дополнительные сведения об ошибке, вызовите GetLastError. Функция может иметь ниже следующее значение.
Значение | Предназначение |
---|---|
ERROR_INVALID_PARAMETER | Один или несколько входных параметров недопустимы. |
Замечания
Как отмечено выше, если hSection - ПУСТО (NULL), система выделяет память для аппаратно-независимого растрового формата (DIB). Система закрывает дескриптор этой памяти тогда, когда Вы позже удаляете аппаратно-независимый растровый формат (DIB) при помощи вызова функции DeleteObject. Если hSection - не ПУСТО (NULL), Вы должны закрыть дескриптор блока памяти hSection самостоятельно после вызова DeleteObject, чтобы удалить точечный рисунок.
Вы не можете вставить DIB секцию из одного приложения в другую прикладную программу.
Windows NT/2000/XP: Вам необходимо гарантировать, чтобы подсистема GDI завершила любое рисование точечного рисунка, созданного функцией CreateDIBSection до того, как Вы нарисуете точечный рисунок самостоятельно. Обращение к точечному рисунку должен быть синхронизировано. Сделайте это при помощи вызова функции GdiFlush. Она применяется при любом использовании указателя на значения битов растра, включая передачу указателя при вызове таких функций как SetDIBits.
ICM: Управление цветом не делается.
Смотри также
Обзор Точечные рисунки, Функции, используемые точечными рисунками, BITMAPINFO, CreateFileMapping, DeleteObject, DIBSECTION, GetDIBColorTable, GetObject, GdiFlush, SetDIBits, SetDIBColorTable
Размещение и совместимость CreateDIBSection |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Да версии 3.1 и выше |
Windows Me |
Да |
Windows 98 |
Да |
Windows 95 |
Да |
Используемая библиотека |
Gdi32.lib |
Заголовочный файл |
|
- объявлено в |
Wingdi.h |
- включено в |
Windows.h |
Unicode |
Нет |
Замечания по платформе |
Не имеется |