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 指定为其设计驱动程序的 Microsoft 操作系统的版本号。 此范围的高阶 4 位指定版本的主编号,低序 4 位包含版本的次要编号。 ulVersion 的低序 8 位指定显示驱动程序的版本号;应为每个版本的显示驱动程序二进制文件递增此值。

控制面板 中的 Display 程序指示 ulVersion 中包含的版本号以及其他特定于驱动程序的信息。

ulTechnology

指定设备技术。 此成员可以是下表中列出的值之一。

含义
DT_CHARSTREAM 仅限设备字体
DT_PLOTTER 矢量绘图仪
DT_RASCAMERA 光栅相机
DT_RASDISPLAY 光栅显示
DT_RASPRINTER 光栅打印机

ulHorzSize

指定物理表面的宽度。 正值表示宽度以毫米为单位,负值表示宽度以千分米为单位。

ulVertSize

指定物理表面的高度。 正值表示高度以毫米为单位,负值表示高度以千分米为单位。

ulHorzRes

指定物理表面 (显示设备) 或打印机) 可打印表面的宽度 ((以像素为单位)。

另请参阅 ulDesktopHorzRes

ulVertRes

指定物理表面 (显示设备) 或打印机) 可打印表面的高度 ((以像素为单位)。

cBitsPixel

指定每个颜色平面中的相邻位数。 每个像素的总位数是 cBitsPixelcPlanes 的乘积。

cPlanes

指定颜色平面的数目。

ulNumColors

对于淡化设备, ulNumColors 指定默认调色板中的条目数。 对于不包含打印机) 的非 (,ulNumColors 设置为 -1。

flRaster

为保留,并且必须保留为零。

ulLogPixelsX

以每英寸逻辑像素为单位指定设备的宽度分辨率。

对于打印机,此成员应设置为打印机的分辨率(以 dpi 为单位)。

对于显示器,此成员必须设置为 96。

ulLogPixelsY

以每英寸逻辑像素为单位指定设备的高度分辨率。

对于打印机,此成员应设置为打印机的分辨率(以 dpi 为单位)。

对于显示器,此成员必须设置为 96。

flTextCaps

指定描述 Windows 3.1 文本功能的标志。 如果驱动程序TC_SCROLLBLT标志在此成员中,则表示控制台应通过使用驱动程序提供的 DrvTextOut 函数而不是 DrvBitBltDrvCopyBits 函数重绘整个屏幕来执行文本滚动。 如果屏幕到屏幕位块传输速度缓慢,驱动程序应设置此标志。 如果未设置此标志,驱动程序将隐式请求控制台通过 DrvBitBlt/DrvCopyBits 执行文本滚动。

ulDACRed

ulDACGreen

ulDACBlue

指定指定颜色的 DAC 位的显示数。

ulAspectX

指定设备像素的相对宽度,范围为 1 到 1000。

ulAspectY

指定设备像素的相对高度,范围为 1 到 1000。

ulAspectXY

指定 ulAspectXulAspectY 的平方和的平方根。

xStyleStep

指定 x-major 行 dx 的样式前进的分子。 有关其他信息,请参阅以下 “备注” 部分和 “带样式的修饰线”。

yStyleStep

指定 y-major 行 dy 的样式前进的分子。 有关其他信息,请参阅以下 “备注” 部分和 “带样式的修饰线”。

denStyleStep

指定样式前进的分母 D。有关其他信息,请参阅以下 “备注” 部分和 “带样式的修饰线”。

ptlPhysOffset

指定一个 POINTL 结构,该结构包含图面不可写边距的大小(以像素为单位)。

szlPhysSize

指定一个 SIZEL 结构,该结构包含整个图面的大小(以像素为单位),包括不可写的边距。 SIZEL 结构与 SIZE 结构相同。

ulNumPalReg

指定索引设备的调色板寄存器数。

ciDevice

在 CIE 坐标空间中定义设备颜色的 COLORINFO 结构。

ulDevicePelsDPI

对于打印机,指定 (或点的像素数,或者如果像素并排布局且之间没有重叠或间距,则指定每英寸) 的喷头数。 例如,如果像素的大小为 0.001 英寸,则此值等于 0.001 除以 0.001。 如果成员为零,GDI 半调将基于所有像素连接且没有重叠的假设来计算此数字。

由于大多数打印机的物理点大小大于测量的点大小,因此 GDI 根据单元格大小 (图案大小) 使用此值来近似计算可以放置的物理点数。 然后执行对数回归以确定什么是最线性的;也就是说,应放置点的位置以获得最佳覆盖范围,以优化重叠的设备像素覆盖率 (点增益) 。

对于显示器,此成员应设置为零。

ulPrimaryOrder

为半色调输出指定设备的原色或平面编号的位顺序。 此成员可以是下表中列出的值之一。

标志 含义
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

指定半色调图案的大小。 以 AxB M 结尾的值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

指定描述设备的标志的组合。 半调需要这些标志。 此成员可以是以下值的组合:

标志 含义
HT_FLAG_8BPP_CMY332_MASK 用于清除 flHTFlags (位 24 到 31) 的上限 8 位的标志。 然后,可以使用 MAKE_CMY332_MASK 宏为每像素 8 位 CMY 模式墨迹级别信息设置这些位。 有关详细信息 ,请参阅使用 GDI 每像素 8 位 CMY 掩码模式
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 半色调应使用CMY_INVERTED模式调色板呈现每像素 8 位询问模式图面位图。 有关CMY_INVERTED模式调色板的说明和要求,请参阅 使用 GDI 每像素 8 位 CMY 掩码模式
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 bpp 和 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

分别指定用户提供的半色调 dither 图案的宽度和高度(以像素为单位)。 cxHTPat 的值必须在HT_USERPAT_CX_MIN HT_USERPAT_CX_MAX(含)的范围内。 cyHTPat 的值必须在HT_USERPAT_CY_MIN HT_USERPAT_CY_MAX范围内(含)。 这些常量在 winddi.h 中定义。 有关详细信息,请参阅以下 “备注 ”部分。

pHTPatA

pHTPatB

pHTPatC

分别指向由 ulPrimaryOrder 成员中的 PRIMARY_ORDER_XXX 值定义的原色 A、B 和 C 的用户定义半色调抖色图案。 每个抖变模式必须是大小 为 cxHTPat by cyHTPat 的有效二维字节数组。 有关详细信息,请参阅以下 “备注 ”部分。

flShadeBlend

指定一组标志,这些标志指示设备的着色和混合功能。 显示驱动程序应忽略此成员,并应将其设置为零。 对于打印机驱动程序,驱动程序在此成员中放置的值是应用程序调用 GetDeviceCaps (hdc、 SHADEBLENDCAPS) 时 GDI 报告的值。 Microsoft Window SDK 文档中介绍了 GetDeviceCaps 函数。

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 显示设备物理像素信息已知,但不能表示为给定枚举之一。 枚举当前适用于基于 LCD 的监视器。 满足以下任一条件时,驱动程序应将 ulPhysicalPixelCharacteristics 设置为PPC_UNDEFINED。 (此列表并不全面,但涵盖了最常见的情况。)
  • 驱动程序知道监视器不是 LCD 设备。
  • 设备是 LCD 设备,但帧缓冲区的分辨率不同于需要缩放的物理显示器的本机分辨率。 也就是说,需要缩放,因为帧缓冲区像素和设备像素之间不再存在一对一的对应关系。

ulPhysicalPixelGamma

指定显示设备的伽玛。 此成员应设置为物理像素的伽玛(按倍数 1000 缩放)或以下值之一。 例如,伽玛值 2.2 将表示为 2200。

含义
PPG_DEFAULT 驱动程序不知道设备的伽玛。
PPG_SRGB 设备使用 sRGB 伽玛。

注解

在调用驱动程序提供的 DrvEnablePDEV 函数之前,GDI 对结构进行零初始化。

xStyleStepyStyleStepdenStyleStep 成员定义修饰线样式在绘制修饰线的每个像素时应如何前进。 沿每个像素样式前进的量定义为一个分数,取决于线条是 x 样式还是 y 样式。 如果线条为 x 样式,则对于在 x 方向上移动的每个像素,样式将按小数 位数 dx/D 前进。 否则,对于在 y 方向上移动的每个像素,样式将按 dy/D 前进。

预定义线条样式中的点PS_DOT各为一个单位长。 如果驱动程序将 xStyleStep 定义为 1, 将 denStyleStep 定义为 5,则虚线水平线由 5 像素-on 和 5 像素关闭(重复)组成。

这三个数字中的每一个都必须小于 65536,即使 caps 成员是 LONG 值。 这些样式步骤由驱动程序定义,以确保线条中的点和短划线在输出设备上的大小令人赏心悦目。 对于非普通纵横比,水平和垂直步骤可以不同以更正。 例如,在像素比宽度高 33% 的 EGA 显示器上,可以设置:

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

在本例中,水平虚线为 4 像素,关闭 4 像素,因为每个像素的样式前进 3/12 或 1/4。 垂直虚线为 3 像素/3 像素关闭。

如果 x 和 y 样式步骤均匀划分为样式分母,则样式线条看起来更好,如上例所示。 这会提供始终相同长度的短划线和点。

GDI 需要此信息,以便其位图函数可以准确地模拟设备在自身表面上执行的操作。 应用程序可以访问此信息,以确定将针对带样式的线条确切打开的像素。 另请参阅 带样式的修饰线

半色调相关成员 cxHTPatcyHTPatpHTPatApHTPatBpHTPatC 可在 OEM Unidrv 呈现插件中使用,以定义由一种或三种颜色组成的自定义半色调模式。 仅当 ulHTPatternSize 成员设置为 HT_PATSIZE_USER 时,才会检查这些成员。 在这种情况下,OEM 可以根据资源文件中存储的数据或 OEM 自定义模块生成的数据,使用这些成员来定义自定义半色调模式。 cxHTPatcyHTPat 成员定义三个二维半色调模式数组中每个数组的大小。 pHTPatApHTPatBpHTPatC 成员指向每种颜色的相应模式数组。 如果仅使用一个模式数组, 则 pHTPatApHTPatB pHTPatC 指向它。

半色调抖变模式中特定位置的每个字节阈值决定了相应输出平面位置处的像素是打开还是关闭。 模式数组中特定位置的零阈值指示忽略相应的像素位置, (为黑色) 。 阈值从 1 到 255 提供具有 255 个灰色级别的抖色模式;如果输出平面中的像素值大于或等于该位置的阈值,则打开像素。 小于其相应阈值的像素值会导致其像素在输出平面中关闭。 有关详细信息,请参阅自定义 Microsoft 打印机驱动程序中的自定义半顿

要求

要求
Header winddi.h (包括 Winddi.h)

另请参阅

CIECHROMA

COLORINFO

DrvBitBlt

DrvCopyBits

DrvEnablePDEV

DrvTextOut