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 所指向的緩衝區中。 如果 pResourceNULL,這會是零。

傳回值

方法必須傳回下列其中一個值:

傳回碼 描述
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 (包括 Prcomoem.h)

另請參閱

IPrintOemUni 介面

IPrintOemUni::ImageProcessing