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资源,因此 pResourceNULL。 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 文件中的半色调功能。 以下 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) |