IPrintOemUni::HalftonePattern 方法 (prcomoem.h)

IPrintOemUni::HalftonePattern 方法可与 Unidrv 支持的打印机一起使用,以在半色调操作中使用半色调模式之前创建或修改该模式。

语法

HRESULT HalftonePattern(
  PDEVOBJ pdevobj,
  PBYTE   pHTPattern,
  DWORD   dwHTPatternX,
  DWORD   dwHTPatternY,
  DWORD   dwHTNumPatterns,
  DWORD   dwCallbackID,
  PBYTE   pResource,
  DWORD   dwResourceSize
);

参数

pdevobj

调用方提供的指向 DEVOBJ 结构的指针。

pHTPattern

调用方提供的指针,指向接收方法提供的半色调模式的缓冲区。 缓冲区大小(以字节为单位)为:

(((dwHTPatternX * dwHTPatternY) + 3)/4) * 4 * dwHTNumPatterns

dwHTPatternX

由 GPD 文件的 *HTPatternSize 属性中的第一个值指定的半色调模式的调用方提供的长度(以像素为单位)。

dwHTPatternY

由 GPD 文件的 *HTPatternSize 属性中的第二个值指定的半色调图案的调用方提供的高度(以像素为单位)。

dwHTNumPatterns

调用方提供的模式数,由 GPD 文件的 *HTNumPatterns 属性指定。 模式数可以是 1 或 3。

dwCallbackID

调用方提供的值标识由 GPD 文件的 *HTCallbackID 属性指定的半色调方法。

pResource

调用方提供的指针指向包含由 GPD 文件的 *rcHTPatternID 属性指定的半色调模式的缓冲区。 这可以是 NULL

dwResourceSize

pResource 指向的缓冲区中包含的半色调模式的调用方提供的大小。 如果 pResource 为 NULL,则为

返回值

方法必须返回以下值之一:

返回代码 说明
S_OK 操作成功。
E_FAIL 此操作失败。
E_NOTIMPL 该方法未实现。

注解

在 Unidrv 将半色调模式传递到 GDI 之前, IPrintOemUni::HalftonePattern 方法用于创建或修改半色调模式。 其用途是允许将专有的半色调模式存储为加密资源或在运行时生成。

如果 实现了 IPrintOemUni::HalftonePattern 方法,并且当前所选半调方法的 GPD 文件条目包含 *HTCallbackID 属性,则 Unidrv 在将半色调模式传递到 GDI 之前调用 IPrintOemUni::HalftonePattern 方法。

如果当前所选的半调方法的 GPD 文件条目包含标识RC_HTPATTERN资源的 *rcHTPatternID 条目,则 Unidrv 获取模式并将指向该模式的指针作为 pResource 参数值传递。 这使你可以将模式存储为加密资源,并使用 IPrintOemUni::HalftonePattern 方法解码该模式。 解码模式应在 pHTPattern 指向的缓冲区中返回。

还可以使用 IPrintOemUni::HalftonePattern 方法生成半色调模式。 在这种情况下,不需要RC_HTPATTERN资源,因此 pResourceNULLIPrintOemUni::HalftonePattern 方法应生成一个模式,并在 pHTPattern 指向的缓冲区中返回该模式。

如果 IPrintOemUni::HalftonePattern 方法返回一个模式,则它将用于所有颜色。 如果方法返回三个模式,则必须按 RGB 顺序指定它们。

以下示例演示呈现插件的 HalftonePattern 方法的实现。 方法计算HTPattern_DDK模式数组的长度(以字节为单位),然后将模式数组中的字节复制到此方法的 pHTPattern 参数指向的缓冲区。 模式数组可以包含一种或三种模式,具体取决于该图案是用于所有颜色还是具有单独的红色、绿色和蓝色图案。 为简洁起见,并未列出模式数组的所有元素。

static BYTE HTPattern_DDK[256] = {
    129,  44,  59, 124, 143, 232, 166, ...
    ...
    ...
    98, 202, 130, 148, 213,  101,  163, 72
};

HRESULT __stdcall IOemUni::HalftonePattern(
    PDEVOBJ     pdevobj,
    PBYTE       pHTPattern,
    DWORD       dwHTPatternX,
    DWORD       dwHTPatternY,
    DWORD       dwHTNumPatterns,
    DWORD       dwCallbackID,
    PBYTE       pResource,
    DWORD       dwResourceSize)
{
PBYTE  pSrcPattern;
DWORD  dwLen = sizeof(HTPattern_DDK);

if (dwLen != (((dwHTPatternX * dwHTPatternY) + 3) / 4) * 4 * dwHTNumPatterns)
    return E_FAIL;

pSrcPattern = HTPattern_DDK;

while (dwLen-- > 0)
    *pHTPattern++ = *pSrcPattern++;

return S_OK;
}

呈现插件中 HalftonePattern 方法的实现必须在 GPD 文件中附带 Halftone 功能。 以下 GPD 示例演示了半色调功能,其HT_PAT_DDK_16x16选项描述了在上一个示例中生成的自定义模式。


*Feature: Halftone

{

    *rcNameID: =HALFTONING_DISPLAY

    *HelpIndex: 12005

    *DefaultOption: HT_PATSIZE_AUTO

    *Option: HT_PATSIZE_AUTO

    {

        *rcNameID: =HT_AUTO_SELECT_DISPLAY

    }

    *Option: HT_PATSIZE_SUPERCELL_M

    {

        *rcNameID: =HT_SUPERCELL_DISPLAY

    }

    *Option: HT_PATSIZE_6x6_M

    {

        *rcNameID: =HT_DITHER6X6_DISPLAY

    }

    *Option: HT_PATSIZE_8x8_M

    {

        *rcNameID: =HT_DITHER8X8_DISPLAY

    }

    *Option: HT_PAT_DDK_16x16

    {

        *Name: "DDK 16x16"

        *HTPatternSize: PAIR(16, 16)

        *HTNumPatterns: 1

        *HTCallbackID: 1

    }

}

IPrintOemUni::HalftonePattern 方法是可选的。 如果呈现插件实现此方法,则插件的 IPrintOemUni::GetImplementedMethod 方法必须在收到“HalftonePattern”作为输入时返回S_OK。

有关半调的详细信息,请参阅半色调功能的 自定义半调选项属性

要求

要求
目标平台 桌面
标头 prcomoem.h (包括 Prcomoem.h)

另请参阅

IPrintOemUni 接口

IPrintOemUni::ImageProcessing