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


Структура GDIINFO (winddi.h)

Структура GDIINFO описывает графические возможности данного устройства.

Синтаксис

typedef struct _GDIINFO {
  ULONG     ulVersion;
  ULONG     ulTechnology;
  ULONG     ulHorzSize;
  ULONG     ulVertSize;
  ULONG     ulHorzRes;
  ULONG     ulVertRes;
  ULONG     cBitsPixel;
  ULONG     cPlanes;
  ULONG     ulNumColors;
  ULONG     flRaster;
  ULONG     ulLogPixelsX;
  ULONG     ulLogPixelsY;
  ULONG     flTextCaps;
  ULONG     ulDACRed;
  ULONG     ulDACGreen;
  ULONG     ulDACBlue;
  ULONG     ulAspectX;
  ULONG     ulAspectY;
  ULONG     ulAspectXY;
  LONG      xStyleStep;
  LONG      yStyleStep;
  LONG      denStyleStep;
  POINTL    ptlPhysOffset;
  SIZEL     szlPhysSize;
  ULONG     ulNumPalReg;
  COLORINFO ciDevice;
  ULONG     ulDevicePelsDPI;
  ULONG     ulPrimaryOrder;
  ULONG     ulHTPatternSize;
  ULONG     ulHTOutputFormat;
  ULONG     flHTFlags;
  ULONG     ulVRefresh;
  ULONG     ulBltAlignment;
  ULONG     ulPanningHorzRes;
  ULONG     ulPanningVertRes;
  ULONG     xPanningAlignment;
  ULONG     yPanningAlignment;
  ULONG     cxHTPat;
  ULONG     cyHTPat;
  LPBYTE    pHTPatA;
  LPBYTE    pHTPatB;
  LPBYTE    pHTPatC;
  ULONG     flShadeBlend;
  ULONG     ulPhysicalPixelCharacteristics;
  ULONG     ulPhysicalPixelGamma;
} GDIINFO, *PGDIINFO;

Члены

ulVersion

Указывает номер версии драйвера. Порядок байтов ulVersion имеет следующую форму.

Рисунок, показывающий элемент ulVersion, указывающий номер версии драйвера

Для 16 бит высокого порядка необходимо задать нулевое значение. Разряды от 8 до 15 указывают номер версии операционной системы Майкрософт, для которой предназначен драйвер. 4 бита высокого порядка в этом диапазоне указывают основное число версии, 4 бита низкого порядка содержат дополнительное число версии. 8 битов ulVersion нижнего порядка указывают номер версии драйвера дисплея; Это значение должно увеличиваться для каждого выпуска двоичного файла драйвера отображения.

Программа Отображения в панель управления указывает номер версии, содержащийся в ulVersion, а также другие сведения о драйвере.

ulTechnology

Указывает технологию устройства. Этот элемент может быть одним из значений, перечисленных в следующей таблице.

Значение Значение
DT_CHARSTREAM Только шрифты устройств
DT_PLOTTER Векторный плоттер
DT_RASCAMERA Растровая камера
DT_RASDISPLAY Растровый дисплей
DT_RASPRINTER Растровый принтер

ulHorzSize

Задает ширину физической поверхности. Положительное значение указывает, что ширина в миллиметрах, а отрицательное значение указывает, что ширина в единицах микрометров.

ulVertSize

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

ulHorzRes

Задает ширину (в пикселях) физической поверхности (устройства отображения) или печатаемой поверхности (принтеры).

См. также ulDesktopHorzRes.

ulVertRes

Задает высоту физической поверхности (устройства отображения) или печатаемой поверхности (принтеры) в пикселях.

cBitsPixel

Указывает количество смежных битов в каждой цветовой плоскости. Общее количество битов на пиксель — это произведение cBitsPixel и cPlanes.

cPlanes

Указывает количество цветовых плоскостей.

ulNumColors

Для палеттизированных устройств ulNumColors указывает количество записей в цветовой палитре по умолчанию. Для неспалетизированных устройств (которые не включают принтеры) ulNumColors имеет значение -1.

flRaster

Зарезервировано и должно быть равно нулю.

ulLogPixelsX

Задает разрешение ширины устройства в логических пикселях на дюйм.

Для принтеров для этого элемента должно быть задано разрешение принтера в разрешении на дюйм.

Для дисплеев этот элемент должен иметь значение 96.

ulLogPixelsY

Задает разрешение высоты устройства в логических пикселях на дюйм.

Для принтеров для этого элемента должно быть задано разрешение принтера в разрешении на дюйм.

Для дисплеев этот элемент должен иметь значение 96.

flTextCaps

Задает флаг, описывающий возможности текста в Windows 3.1. Если флаг TC_SCROLLBLT драйвера находится в этом элементе, это означает, что консоль должна выполнять прокрутку текста, перерисовав весь экран, используя предоставленную драйвером функцию DrvTextOut , а не функции DrvBitBlt или DrvCopyBits . Драйвер должен установить этот флаг, если передача битов с экрана на экран выполняется медленно. Если этот флаг не установлен, драйвер неявно запрашивает, чтобы консоль выполняла прокрутку текста по DrvBitBlt/DrvCopyBits.

ulDACRed

ulDACGreen

ulDACBlue

Указывает количество отображаемых битов приложения уровня данных для указанного цвета.

ulAspectX

Указывает относительную ширину пикселя устройства в диапазоне от 1 до 1000.

ulAspectY

Задает относительную высоту пикселя устройства в диапазоне от 1 до 1000.

ulAspectXY

Задает квадратный корень суммы квадратов ulAspectX и ulAspectY.

xStyleStep

Задает числитель вперед стиля для линий x-major( dx). Дополнительные сведения см. в разделе "Примечания " и "Стилированные косметические линии".

yStyleStep

Задает числитель стиля для линий y-major, dy. Дополнительные сведения см. в разделе "Примечания " и "Стилированные косметические линии".

denStyleStep

Указывает знаменатель продвижения стиля D. Дополнительные сведения см. в разделе "Примечания " и "Стилированные косметические линии".

ptlPhysOffset

Задает структуру POINTL , содержащую размер незаписываемого поля поверхности в пикселях.

szlPhysSize

Задает структуру SIZEL, содержащую размер всей поверхности в пикселях, включая незаписываемые поля. Структура SIZEL идентична структуре SIZE .

ulNumPalReg

Указывает количество регистров палитры для индексированного устройства.

ciDevice

Структура COLORINFO , которая определяет цвета устройства в пространстве координат CIE.

ulDevicePelsDPI

Для принтеров указывает количество пикселей (точек или сопел) на дюйм, если пиксели расположены рядом без перекрытия или интервала между ними. Например, если размер пикселя составляет 0,001 дюйма, это значение равно 0,001. Если член равен нулю, полуэлементирование GDI вычисляет это число на основе предположения, что все пиксели связаны без перекрытия.

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

Для дисплеев этот элемент должен быть равен нулю.

ulPrimaryOrder

Задает порядковый порядок основных цветов или номеров плоскости устройства для вывода полутонов. Этот элемент может быть одним из значений, перечисленных в следующей таблице.

Flag Значение
PRIMARY_ORDER_ABC Порядок вывода устройства — RGB или CMY. Красный или голубой находится в наименее значимых битах; синий или желтый имеет самые значительные биты.
PRIMARY_ORDER_ACB Порядок вывода устройства — RBG или CYM. Красный или голубой находится в наименее значимых битах; зеленый или пурпурный находится в наиболее значительных битах.
PRIMARY_ORDER_BAC Порядок вывода устройства — GRB или MCY. Зеленый или пурпурный находится в наименее значимых битах; синий или желтый имеет самые значительные биты.
PRIMARY_ORDER_BCA Порядок вывода устройства — GBR или MYC. Зеленый или пурпурный находится в наименее значимых битах; красный или голубой находится в наиболее значительных битах.
PRIMARY_ORDER_CBA Порядок вывода устройства — BGR или YMC. Синий или желтый имеет наименьшее значение; красный или голубой находится в наиболее значительных битах.
PRIMARY_ORDER_CAB Порядок вывода устройства — BRG или YCM. Синий или желтый имеет наименьшее значение; зеленый или пурпурный находится в наиболее значительных битах.

ulHTPatternSize

Задает размер полутонового шаблона. Значения, заканчивающиеся на AxBM, являются вариантами шаблонов AxB . Другими словами, размерAxB и SIZE_AxB_M отличаются тем, какие пиксели освещаются в шаблоне A x B. Этот элемент может иметь одно из следующих значений:

HT_PATSIZE_2x2
HT_PATSIZE_2x2_M
HT_PATSIZE_4x4
HT_PATSIZE_4x4_M
HT_PATSIZE_6x6
HT_PATSIZE_6x6_M
HT_PATSIZE_8x8
HT_PATSIZE_8x8_M
HT_PATSIZE_10x10
HT_PATSIZE_10x10_M
HT_PATSIZE_12x12
HT_PATSIZE_12x12_M
HT_PATSIZE_14x14
HT_PATSIZE_14x14_M
HT_PATSIZE_16x16
HT_PATSIZE_16x16_M
HT_PATSIZE_SUPERCELL
HT_PATSIZE_SUPERCELL_M
HT_PATSIZE_USER
HT_PATSIZE_MAX_INDEX
HT_PATSIZE_DEFAULT

ulHTOutputFormat

Задает предпочтительный формат вывода для полутонов. HT_FORMAT_4BPP использует только 8 цветов полной интенсивности, а HT_FORMATP_IRGB использует все 16 цветов, включая цвета половинной интенсивности. Предполагается, что для HT_FORMAT_16BPP используется формат 5 x 5 x 5 (5 бит на цвет). Этот элемент может иметь одно из следующих значений:

HT_FORMAT_1BPP
HT_FORMAT_4BPP
HT_FORMAT_4BPP_IRGB
HT_FORMAT_8BPP
HT_FORMAT_16BPP
HT_FORMAT_24BPP
HT_FORMAT_32BPP

flHTFlags

Задает сочетание флагов, описывающих устройство. Эти флаги необходимы для полутонов. Этот элемент может быть сочетанием следующих значений:

Flag Значение
HT_FLAG_8BPP_CMY332_MASK Флаг, используемый для очистки верхних восьми битов flHTFlags (биты от 24 до 31). Затем можно использовать макрос MAKE_CMY332_MASK , чтобы задать эти биты с информацией на уровне рукописного ввода в режиме CMY 8 бит на пиксель. Дополнительные сведения см. в статье Использование 8-разрядных режимов маски CMY в GDI .
HT_FLAG_ADDITIVE_PRIMS Первичные устройства являются аддитивным.
HT_FLAG_DO_DEVCLR_XFORM Запрашивает GDI для выполнения универсальной цветовой коррекции.
HT_FLAG_HAS_BLACK_DYE Устройство имеет отдельный черный краситель.
HT_FLAG_HIGH_INK_ABSORPTION
HT_FLAG_HIGHER_INK_ABSORPTION
HT_FLAG_HIGHEST_INK_ABSORPTION
Бумага в устройстве поглощает больше, чем обычно, поэтому GDI должен отображать меньше рукописного ввода на бумаге. Эти флаги указывают на относительное количество поглощения чернил, при этом HT_FLAG_HIGHER_INK_ABSORPTION обозначает больше поглощения, чем HT_FLAG_HIGH_INK_ABSORPTION, но меньше HT_FLAG_HIGHEST_INK_ABSORPTION.
HT_FLAG_INK_ABSORPTION_IDX0
HT_FLAG_INK_ABSORPTION_IDX1
HT_FLAG_INK_ABSORPTION_IDX2
HT_FLAG_INK_ABSORPTION_IDX3
Флаги, используемые для определения HT_FLAG_HIGH/HIGHER/HIGHEST_INK_ABSORPTION и HT_FLAG_LOW/LOWER/LOWEST_INK_ABSORPTION.
HT_FLAG_INK_HIGH_ABSORPTION Флаг, используемый для определения HT_FLAG_HIGH/HIGHER/HIGHEST_INK_ABSORPTION.
HT_FLAG_INVERT_8BPP_BITMASK_IDX Полутон GDI должен отрисовывать растровое изображение поверхности в режиме запросов 8 бит на пиксель с помощью палитры режима CMY_INVERTED. Описание и требования к палитре CMY_INVERTED режима см. в статье Использование режимов маски CMY 8-bit-per-Pixel CMY GDI .
HT_FLAG_LOW_INK_ABSORPTION
HT_FLAG_LOWER_INK_ABSORPTION
HT_FLAG_LOWEST_INK_ABSORPTION
Бумага в устройстве поглощает меньше обычного количества чернил, поэтому GDI должен отображать больше рукописного ввода на бумаге. Эти флаги указывают относительное количество поглощения чернил, при этом HT_FLAG_LOWER_INK_ABSORPTION обозначает меньше поглощения, чем HT_FLAG_LOW_INK_ABSORPTION, но более HT_FLAG_LOWEST_INK_ABSORPTION.
HT_FLAG_NORMAL_INK_ABSORPTION Бумага в устройстве поглощает нормальное количество чернил.
HT_FLAG_OUTPUT_CMY Устройство использует первичные серверы CMY, а не основные rgb-источники. Это значение флага применяется только к конечным поверхностям 1 и 4 bpp.
HT_FLAG_PRINT_DRAFT_MODE Отключает код сглаживания GDI.
HT_FLAG_SQUARE_DEVICE_PEL Пиксель устройства является квадратным, а не круглым (только для отображения — для принтеров требуются скругленные пиксели).
HT_FLAG_USE_8BPP_BITMASK Устройство использует монохромную печать.

ulVRefresh

Частота обновления видео для текущего режима отображения. Это значение, возвращаемое драйвером мини-порта для частоты обновления для текущего режима.

Программа Отображения в панель управления отображает частоту обновления, содержащуюся в элементе ulVRefresh.

ulBltAlignment

Этот элемент указывает предпочтительное выравнивание по оси X для передачи битовых блоков на устройство. Значение , равное нулю, указывает, что передача битовых блоков ускоряется; Любое другое неорицательное число указывает, что передача битовых блоков не ускоряется, и дает предпочтительное горизонтальное выравнивание в виде пикселя, кратного.

Это значение используется системой для определения выравнивания по умолчанию для позиций окон, а также для установки начального значения полного перетаскивания по умолчанию во время установки. Значение, равное нулю, указывает, что полное перетаскивание должно быть включено по умолчанию; Любое значение, отличное от нуля, указывает, что полное перетаскивание должно быть отключено по умолчанию.

ulPanningHorzRes

ulPanningVertRes

Должен игнорироваться драйвером и оставаться инициализированным нулевым значением.

xPanningAlignment

yPanningAlignment

Должен игнорироваться драйвером и оставаться инициализированным нулевым значением.

cxHTPat

cyHTPat

Укажите ширину и высоту ( в пикселях) предоставленного пользователем шаблона полутона. Значение cxHTPat должно находиться в диапазоне HT_USERPAT_CX_MIN HT_USERPAT_CX_MAX включительно. Значение cyHTPat должно находиться в диапазоне HT_USERPAT_CY_MIN HT_USERPAT_CY_MAX включительно. Эти константы определяются в файле winddi.h. Дополнительные сведения см. в следующем разделе Примечания .

pHTPatA

pHTPatB

pHTPatC

Наведите указатель на определяемые пользователем шаблоны полутонов для основных цветов A, B и C соответственно, как определено значением PRIMARY_ORDER_XXX в элементе ulPrimaryOrder . Каждый шаблон dither должен быть допустимым двумерным массивом байтов размера cxHTPat по cyHTPat. Дополнительные сведения см. в следующем разделе Примечания .

flShadeBlend

Задает набор флагов, указывающих возможности затенения и смешивания устройства. Драйверы отображения должны игнорировать этот элемент и оставить его равным нулю. Для драйверов принтера значение, которое драйвер помещает в этот элемент, является значением, которое GDI сообщает, когда приложение вызывает GetDeviceCaps(hdc, SHADEBLENDCAPS). Функция GetDeviceCaps описана в документации по пакету SDK Microsoft Window.

ulPhysicalPixelCharacteristics

Указывает способ настройки цветовых фрагментов для формирования пикселей на устройстве отображения. Фрагменты цвета на устройстве отображения можно упорядочить в порядке RGB или в порядке BGR, полностью независимо от порядка RGB в буфере кадров. Фрагменты цвета можно настроить в виде горизонтальных полос, в которых все фрагменты в одной строке имеют одинаковый цвет. Кроме того, фрагменты цвета можно настроить в виде вертикальных полос, в которых все фрагменты в одном столбце имеют одинаковый цвет. Вертикальное чередование предпочтительнее, так как оно фактически предоставляет три отдельных фрагмента в строке для каждого пикселя, тем самым обеспечивая большее горизонтальное разрешение подпиксели.

Члену ulPhysicalPixelCharacteristics должно быть присвоено одно из значений, показанных в следующей таблице:

Значение Значение
PPC_DEFAULT Отображение сведений о физических пикселях устройства неизвестно.
PPC_BGR_ORDER_HORIZONTAL_STRIPES Фрагменты физического цвета на устройстве отображения располагаются сверху вниз в виде строк синего, зеленого и красного цветов.
PPC_BGR_ORDER_VERTICAL_STRIPES Фрагменты физического цвета на устройстве отображения расположены слева направо в виде столбцов синего, зеленого и красного цветов.
PPC_RGB_ORDER_HORIZONTAL_STRIPES Фрагменты физического цвета на устройстве отображения располагаются сверху вниз в виде строк красного, зеленого и синего цветов.
PPC_RGB_ORDER_VERTICAL_STRIPES Фрагменты физического цвета на устройстве отображения располагаются слева направо в виде столбцов красного, зеленого и синего цветов.
PPC_UNDEFINED Отображение сведений о физических пикселях устройства известно, но не может быть выражено как одно из указанных перечислений. В настоящее время перечисления применимы к монитору на основе ЖК-дисплея. Драйвер должен задать для ulPhysicalPixelCharacteristics значение PPC_UNDEFINED при выполнении любого из следующих условий. (Этот список не является исчерпывающим, но охватывает наиболее распространенные условия.)
  • Драйвер знает, что монитор не является ЖК-устройством.
  • Устройство является ЖК-устройством, но разрешение буфера кадров отличается от собственного разрешения физического дисплея, требующего масштабирования. Это значит, что масштабирование требуется, так как между пикселями буфера кадров и пикселями устройства больше нет соответствия "один к одному".

ulPhysicalPixelGamma

Задает гамма устройства отображения. Для этого элемента должно быть задано значение гамма физического пикселя, масштабируемое в 1000 раз, или одно из следующих значений. Например, гамма-значение 2,2 будет представлено как 2200.

Значение Значение
PPG_DEFAULT Драйвер не знает гамма для устройства.
PPG_SRGB Устройство использует гамма sRGB.

Комментарии

GDI инициализирует эту структуру с нуля перед вызовом функции DrvEnablePDEV , предоставленной драйвером.

Члены xStyleStep, yStyleStep и denStyleStep определяют, как косметический стиль линии должен продвигаться по мере рисования каждого пикселя косметической линии. Сумма, расширенная по стилю для каждого пикселя, определяется в виде дроби, которая зависит от того, имеет ли линия стиль X или Y. Если линия имеет стиль X, стиль перемещается по дробной сумме dx/D для каждого пикселя, перемещаемого в направлении x. В противном случае стиль перемещается по dy/D для каждого пикселя, перемещаемого в направлении y.

Точки в предопределенном стиле линий PS_DOT имеют длину каждой единицы. Если драйвер определяет xStyleStep как один, а denStyleStep — 5, то пунктирная горизонтальная линия состоит из 5 пикселей, за которым следует 5 пикселей, повторяющиеся.

Каждое из этих трех чисел должно быть меньше 65536, несмотря на то, что члены caps являются значениями LONG. Эти шаги стиля определяются драйвером, чтобы гарантировать, что точки и дефисы в строке имеют приятный размер на устройстве вывода. Горизонтальные и вертикальные шаги могут отличаться для нетривиальных пропорций. Например, на дисплее EGA, пиксели которого на 33 процента выше, чем они имеют ширину, можно задать:

pdevcaps->xStyleStep   =  3;    // For an EGA
pdevcaps->yStyleStep   =  4;
pdevcaps->denStyleStep = 12;

В этом случае горизонтальные пунктирные линии равны 4 пикселям, 4 пикселям, так как стиль увеличивается на 12 или 1/4 для каждого пикселя. Вертикальные пунктирные линии имеют размер 3 пикселя/3 пикселя от.

Стилистированные линии выглядят лучше, если шаги стиля x и y равномерно делятся на знаменатель стиля, как в предыдущем примере. Это дает дефисы и точки, которые всегда имеют одинаковую длину.

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

Элементы, связанные с полутонами, cxHTPat, cyHTPat, pHTPatA, pHTPatB и pHTPatC, можно использовать в подключаемом модуле отрисовки Oem Unidrv для определения пользовательского шаблона полутона, состоящего из одного или трех цветов. Эти элементы проверяются, только если для элемента ulHTPatternSize задано значение HT_PATSIZE_USER. В этом случае изготовитель оборудования может использовать эти элементы для определения пользовательского шаблона полутонов на основе данных, хранящихся в файле ресурсов или созданных модулем настройки изготовителя оборудования. Члены cxHTPat и cyHTPat определяют размер каждого из трех двухмерных массивов шаблонов полутонов. Члены pHTPatA, pHTPatB и pHTPatC указывают на соответствующие массивы шаблонов для каждого цвета. Если используется только один массив шаблонов, на него указывают pHTPatA, pHTPatB и pHTPatC .

Каждое пороговое значение байтов в определенном расположении в полутоновом дизерном шаблоне определяет, будет ли пиксель в соответствующем расположении плоскости вывода включен или выключен. Нулевое пороговое значение в определенном расположении в массиве шаблонов указывает, что соответствующее расположение пикселей игнорируется (черное). Пороговые значения от 1 до 255 обеспечивают 255 уровней серого цвета; Если значение пикселя в выходной плоскости больше или равно порогового значения для этого расположения, пиксель включается. Значение пикселя меньше соответствующего порогового значения приводит к отключению пикселя в выходной плоскости. Дополнительные сведения см . в статье Настройка драйверов принтеров Майкрософт .

Требования

Требование Значение
Заголовок winddi.h (включая Winddi.h)

См. также раздел

CIECHROMA

COLORINFO

DrvBitBlt

DrvCopyBits

DrvEnablePDEV

DrvTextOut