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 的字节顺序具有以下形式。
高阶 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
指定每个颜色平面中的相邻位数。 每个像素的总位数是 cBitsPixel 和 cPlanes 的乘积。
cPlanes
指定颜色平面的数目。
ulNumColors
对于淡化设备, ulNumColors 指定默认调色板中的条目数。 对于不包含打印机) 的非 (,ulNumColors 设置为 -1。
flRaster
为保留,并且必须保留为零。
ulLogPixelsX
以每英寸逻辑像素为单位指定设备的宽度分辨率。
对于打印机,此成员应设置为打印机的分辨率(以 dpi 为单位)。
对于显示器,此成员必须设置为 96。
ulLogPixelsY
以每英寸逻辑像素为单位指定设备的高度分辨率。
对于打印机,此成员应设置为打印机的分辨率(以 dpi 为单位)。
对于显示器,此成员必须设置为 96。
flTextCaps
指定描述 Windows 3.1 文本功能的标志。 如果驱动程序TC_SCROLLBLT标志在此成员中,则表示控制台应通过使用驱动程序提供的 DrvTextOut 函数而不是 DrvBitBlt 或 DrvCopyBits 函数重绘整个屏幕来执行文本滚动。 如果屏幕到屏幕位块传输速度缓慢,驱动程序应设置此标志。 如果未设置此标志,驱动程序将隐式请求控制台通过 DrvBitBlt/DrvCopyBits 执行文本滚动。
ulDACRed
ulDACGreen
ulDACBlue
指定指定颜色的 DAC 位的显示数。
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
在 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 | 设备具有单独的黑色染料。 |
|
设备中的纸张吸收的墨量超过正常量,因此 GDI 在纸张上呈现的墨迹应该更少。 这些标志指示墨迹吸收的相对量,HT_FLAG_HIGHER_INK_ABSORPTION表示吸收大于HT_FLAG_HIGH_INK_ABSORPTION,但小于HT_FLAG_HIGHEST_INK_ABSORPTION。 |
|
用于定义 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 掩码模式 。 |
|
设备中的纸张吸收的墨迹少于正常量,因此 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。 (此列表并不全面,但涵盖了最常见的情况。)
|
ulPhysicalPixelGamma
指定显示设备的伽玛。 此成员应设置为物理像素的伽玛(按倍数 1000 缩放)或以下值之一。 例如,伽玛值 2.2 将表示为 2200。
值 | 含义 |
---|---|
PPG_DEFAULT | 驱动程序不知道设备的伽玛。 |
PPG_SRGB | 设备使用 sRGB 伽玛。 |
注解
在调用驱动程序提供的 DrvEnablePDEV 函数之前,GDI 对结构进行零初始化。
xStyleStep、yStyleStep 和 denStyleStep 成员定义修饰线样式在绘制修饰线的每个像素时应如何前进。 沿每个像素样式前进的量定义为一个分数,取决于线条是 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 需要此信息,以便其位图函数可以准确地模拟设备在自身表面上执行的操作。 应用程序可以访问此信息,以确定将针对带样式的线条确切打开的像素。 另请参阅 带样式的修饰线。
半色调相关成员 cxHTPat、 cyHTPat、 pHTPatA、 pHTPatB 和 pHTPatC 可在 OEM Unidrv 呈现插件中使用,以定义由一种或三种颜色组成的自定义半色调模式。 仅当 ulHTPatternSize 成员设置为 HT_PATSIZE_USER 时,才会检查这些成员。 在这种情况下,OEM 可以根据资源文件中存储的数据或 OEM 自定义模块生成的数据,使用这些成员来定义自定义半色调模式。 cxHTPat 和 cyHTPat 成员定义三个二维半色调模式数组中每个数组的大小。 pHTPatA、pHTPatB 和 pHTPatC 成员指向每种颜色的相应模式数组。 如果仅使用一个模式数组, 则 pHTPatA、 pHTPatB 和 pHTPatC 指向它。
半色调抖变模式中特定位置的每个字节阈值决定了相应输出平面位置处的像素是打开还是关闭。 模式数组中特定位置的零阈值指示忽略相应的像素位置, (为黑色) 。 阈值从 1 到 255 提供具有 255 个灰色级别的抖色模式;如果输出平面中的像素值大于或等于该位置的阈值,则打开像素。 小于其相应阈值的像素值会导致其像素在输出平面中关闭。 有关详细信息,请参阅自定义 Microsoft 打印机驱动程序中的自定义半顿。
要求
要求 | 值 |
---|---|
Header | winddi.h (包括 Winddi.h) |