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 未实现该方法。

言论

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

如果实现 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 文件中的半色调功能。 以下 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 (include Prcomoem.h)

另请参阅

IPrintOemUni 接口

IPrintOemUni::ImageProcessing