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资源,因此 pResource 为 NULL。 IPrintOemUni::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) |