HT_Get8BPPMaskPalette 函数 (winddi.h)

HT_Get8BPPMaskPalette 函数返回每像素 8 位设备类型的掩码板。

语法

LONG HT_Get8BPPMaskPalette(
  [in, out] LPPALETTEENTRY pPaletteEntry,
  [in]      BOOL           Use8BPPMaskPal,
  [in]      BYTE           CMYMask,
  [in]      USHORT         RedGamma,
  [in]      USHORT         GreenGamma,
  [in]      USHORT         BlueGamma
);

参数

[in, out] pPaletteEntry

指向要填充的 Windows SDK 文档中描述的 PALETTEENTRY 结构数组的指针 () 。 GDI 假定它指向有效的内存空间,GDI 可在其中放置整个每像素 8 位半色调调色板。

对于在 Windows XP 及更高操作系统版本上运行的驱动程序,GDI 会检查 pPaletteEntry[0] 以确定如何返回组合的 CMY 调色板。 如果 pPaletteEntry[0] 设置为“RGB0”,调色板将处于CMY_INVERTED模式之一,并且其索引将反转。 也就是说,调色板中的索引 0 为黑色,索引 255 为白色。 如果 pPaletteEntry[0] 未设置为“RGB0”,则调色板为普通 CMY 调色板,索引 0 为白色,索引 255 为黑色。 有关如何使用此参数的新要求和详细信息,请参阅 使用 GDI 8 位每像素 CMY 掩码模式

Windows 2000 忽略驱动程序在 pPaletteEntry[0] 中放置的任何值。 因此,如果你的驱动程序打算在 Windows 2000 Windows XP 或更高版本上运行,并且你的驱动程序将 pPaletteEntry[0] 设置为“RGB0”,则驱动程序从 Windows XP 及更高版本接收的位图的颜色可能与从 Windows 2000 接收的颜色反转。 因此,此类驱动程序必须在下载位图之前检查调色板。

[in] Use8BPPMaskPal

指示应返回哪种类型的调色板。 当 Use8BPPMaskPalTRUE 时,HT_Get8BPPMaskPalette使用 CMY 调色板 (由 CMYMask 中指定的位掩码描述的 PALETTEENTRY) 结构数组的地址设置 pPaletteEntry 参数。 当 Use8BPPMaskPalFALSE 时,函数使用标准 RGB 每像素 8 位半色调调色板的地址设置 pPaletteEntry

[in] CMYMask

指定有关 pPaletteEntry 指向的 PALETTEENTRY 结构数组的信息。 此参数可以具有下列值之一:

含义
0 具有 256 个级别的灰度
1 青色、品红色和黄色 (各有五个级别,范围从 0 到 4) ,共 125 种颜色
2 青色、品红色和黄色 (各有六个级别,范围从 0 到 5) ,共 216 种颜色
3 到 255 一个位掩码,分别指定青色、洋红色和黄色的最大级别数。
 

在 Windows 2000 上运行的驱动程序应限制为每像素 8 位单色。 也就是说,使用的 CMYMask 的值应为 0。

对于 Windows XP 及更高版本的操作系统版本以及 CMYMask 的所有值, pPaletteEntry[0] 中的值确定 pPaletteEntry[0] 后面的调色板是普通 CMY 调色板还是CMY_INVERTED模式调色板之一。 有关详细信息,请参阅 pPaletteEntry 参数的说明。

对于 CMYMask 的值(包括 3 到 255),该值是位掩码,其中位组具有以下含义:

  • 三个最高位 (位 7,6,5) 指定青色级别数。 最多可以有 7 个级别的青色 (级别 1 到 7) 。
  • 中间三位 (位 4,3,2) 指定洋红色的级别数。 最多可以有七级洋红色 (级别 1 至 7) 。
  • 两个最低位 (位 1,0) 指定黄色级别的数目。 最多可以有三个级别的黄色 (级别 1 到 3) 。
对于范围为 3 到 255 的 CMYMask 值,青色、洋红色或黄色级别位为零的任何位掩码组合都无效。 在这种情况下, HT_Get8BPPMaskPalette 返回调色板计数为零。 有关详细信息 ,请参阅使用 GDI 每像素 8 位 CMY 掩码模式

[in] RedGamma

如果 Use8BPPMaskPalTRUE,则不使用此参数的值。 在这种情况下,将在 GDIINFO 结构的 ciDevice 成员中指定 gamma 值。

如果 Use8BPPMaskPalFALSE,则此参数的值指定红色伽玛值(GDI 用于修正调色板的红色、绿色和蓝色伽玛值)。 USHORT 值被解释为实数,其四个最小有效数字位于小数点右侧。 例如,伽玛值 10000 表示实数 1.0000,12345 表示 1.2345。 允许的最小伽玛值为 0.0000,允许的最大值为 6.5535。

[in] GreenGamma

如果 Use8BPPMaskPalTRUE,则不使用此参数的值。 在这种情况下,将在 GDIINFO 结构的 ciDevice 成员中指定 gamma 值。

如果 Use8BPPMaskPalFALSE,则此参数的值指定 GDI 用于调色板的红色、绿色和蓝色伽玛值中的绿色伽玛值。 USHORT 值被解释为实数,其四个最小有效数字位于小数点右侧。 例如,伽玛值 10000 表示实数 1.0000,12345 表示 1.2345。 允许的最小伽玛值为 0.0000,允许的最大值为 6.5535。

[in] BlueGamma

如果 Use8BPPMaskPalTRUE,则不使用此参数的值。 在这种情况下,将在 GDIINFO 结构的 ciDevice 成员中指定 gamma 值。

如果 Use8BPPMaskPalFALSE,则此参数的值指定 GDI 用于调色板伽玛校正的红色、绿色和蓝色伽玛值中的蓝色伽玛值。 USHORT 值被解释为实数,其四个最小有效数字位于小数点右侧。 例如,伽玛值 10000 表示实数 1.0000,12345 表示 1.2345。 允许的最小伽玛值为 0.0000,允许的最大值为 6.5535。

返回值

如果 pPaletteEntry为 NULLHT_Get8BPPMaskPalette 返回 GDI 在 pPaletteEntry 指向的数组中填充的 PALETTEENTRY 结构的数量。 如果 pPaletteEntryNULL,则返回的值是存储半色调调色板所需的 PALETTEENTRY 结构的总计数。

如果在调用此函数时使用了 CMYMask 参数的非法值, HT_Get8BPPMaskPalette 将返回零值。

注解

PALETTEENTRY 结构记录在 Windows SDK 文档中。

使用 Use8BPPMaskPal 设置 FALSE 调用HT_Get8BPPMaskPalette等效于调用 HT_Get8BPPFormatPalette

有关此函数及其参数的使用方式的详细信息,请参阅 使用 GDI 8 位每像素 CMY 掩码模式

要求

   
最低受支持的客户端 在 Windows 2000 及更高版本的 Windows 操作系统中可用。
目标平台 通用
标头 winddi.h (包括 Winddi.h)
Library Win32k.lib
DLL Win32k.sys

另请参阅

HT_Get8BPPFormatPalette