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資源,因此 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 檔案中的半色調功能。 下列 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) |