Структура SURFOBJ (winddi.h)
Структура SURFOBJ — это пользовательский объект для поверхности. Драйвер устройства обычно вызывает методы для объекта surface, только если объект surface представляет точечного изображения GDI или поверхность, управляемую устройством.
Синтаксис
typedef struct _SURFOBJ {
DHSURF dhsurf;
HSURF hsurf;
DHPDEV private_dhpdev;
HDEV private_hdev;
DHPDEV dhpdev;
HDEV hdev;
SIZEL sizlBitmap;
ULONG cjBits;
PVOID pvBits;
PVOID pvScan0;
LONG lDelta;
ULONG iUniq;
ULONG iBitmapFormat;
USHORT iType;
USHORT fjBitmap;
} SURFOBJ;
Члены
dhsurf
Обработка на поверхности при условии, что surface управляется устройством. В противном случае этот элемент равен нулю.
hsurf
Ручка к поверхности.
private_dhpdev
private_hdev
dhpdev
Определяет PDEV устройства, связанное с указанной поверхностью.
hdev
Логический дескриптор GDI для PDEV, связанного с этим устройством.
sizlBitmap
Задает структуру SIZEL, содержащую ширину и высоту поверхности в пикселях. Структура SIZEL идентична структуре SIZE .
cjBits
Указывает размер буфера, на который указывает pvBits.
pvBits
Если поверхность является растровым изображением стандартного формата, это указатель на пиксели поверхности. Для BMF_JPEG или BMF_PNG изображений это указатель на буфер, содержащий данные изображения в формате JPEG или PNG. В противном случае этот элемент имеет значение NULL.
pvScan0
Указатель на первую строку сканирования растрового изображения. Если iBitmapFormat имеет значение BMF_JPEG или BMF_PNG, этот элемент имеет значение NULL.
lDelta
Указывает количество байтов, необходимых для перемещения вниз по одной строке сканирования на растровом рисунке. Если iBitmapFormat имеет значение BMF_JPEG или BMF_PNG, этот элемент имеет значение NULL.
iUniq
Задает текущее состояние указанной поверхности. При каждом изменении поверхности это значение увеличивается. Это позволяет драйверам кэшировать исходные поверхности.
Для поверхности, которая не должна кэшироваться, iUniq имеет нулевое значение. Это значение используется вместе с флагом BMF_DONTCACHE fjBitmap.
iBitmapFormat
Задает стандартный формат, наиболее точно соответствующий этой поверхности. Если элемент iType указывает растровое изображение (STYPE_BITMAP), этот элемент задает его формат. Операционные системы на основе NT поддерживают набор предопределенных форматов, хотя приложения также могут отправлять форматы для конкретных устройств с помощью SetDIBitsToDevice. Поддерживаются предопределенные форматы:
Значение | Значение |
---|---|
BMF_1BPP | 1 бит на пиксель. |
BMF_4BPP | 4 бита на пиксель. |
BMF_8BPP | 8 бит на пиксель. |
BMF_16BPP | 16 бит на пиксель. |
BMF_24BPP | 24 бита на пиксель. |
BMF_32BPP | 32 бита на пиксель. |
BMF_4RLE | 4 бита на пиксель, длина выполнения закодирована. |
BMF_8RLE | 8 бит на пиксель, длина выполнения закодирована. |
BMF_JPEG | Изображение со сжатием JPEG. |
BMF_PNG | Сжатое изображение в формате PNG. |
iType
Тип Surface, который является одним из следующих:
Тип | Определение |
---|---|
STYPE_BITMAP | Поверхность представляет собой растровое изображение. |
STYPE_DEVBITMAP | Поверхность представляет собой растровое изображение в формате устройства. |
STYPE_DEVICE | Поверхность управляется устройством. |
fjBitmap
Если поверхность имеет тип STYPE_BITMAP и является стандартным растровым изображением в несжатом формате, можно задать следующие флаги. В противном случае этот элемент следует игнорировать.
Значение | Значение |
---|---|
BMF_DONTCACHE | Точечное изображение не должно кэшироваться драйвером, так как это временное растровое изображение, созданное GDI, которое драйвер больше не увидит. Если этот флаг установлен, члену iUniq этой структуры будет присвоено значение 0. |
BMF_KMSECTION | Используется только GDI и должен игнорироваться драйвером. |
BMF_NOTSYSMEM | Растровое изображение не находится в системной памяти. EngModifySurface задает этот флаг при перемещении растрового изображения в видеопамять. |
BMF_NOZEROINIT | Растровое изображение не было инициализировано с нуля. |
BMF_TOPDOWN | Первая строка сканирования представляет верхнюю часть растрового изображения. |
BMF_WINDOW_BLT | GDI устанавливает этот флаг для уведомления драйвера о перемещении окна из одного расположения экрана в другое. |
Комментарии
Если драйверу требуются сведения об определенной поверхности, драйвер должен получить доступ к SURFOBJ. Эта структура обеспечивает быстрый доступ к свойствам поверхности.
Если структура SURFOBJ представляет точечное изображение GDI, драйвер должен иметь возможность определить формат растрового изображения и найти биты растрового изображения.
Если структура SURFOBJ представляет поверхность устройства, драйвер должен иметь возможность найти ручку устройства для поверхности.
Дополнительные сведения о поддержке сжатых изображений JPEG и PNG см. в разделе DEVINFO.
Требования
Требование | Значение |
---|---|
Заголовок | winddi.h (включая Winddi.h) |