Поделиться через


Структура 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)