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 属性の 2 番目の値で指定されたハーフトーン パターンの呼び出し元指定の高さ (ピクセル単位)。

dwHTNumPatterns

GPD ファイルの *HTNumPatterns 属性で指定された、呼び出し元から指定されたパターンの数。 パターンの数は、1 または 3 のいずれかになります。

dwCallbackID

GPD ファイルの *HTCallbackID 属性で指定されたハーフトーン メソッドを識別する呼び出し元指定の値。

pResource

GPD ファイルの *rcHTPatternID 属性で指定されたハーフトーン パターンを含むバッファーへの呼び出し元指定ポインター。 NULL 指定できます。

dwResourceSize

pResource が指すバッファーに含まれるハーフトーン パターンの呼び出し元指定サイズ。 pResource が NULL の場合、これは 0 です

戻り値

メソッドは、次のいずれかの値を返す必要があります。

リターン コード 説明
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 メソッドが 1 つのパターンを返す場合は、すべての色に使用されます。 メソッドが 3 つのパターンを返す場合は、RGB 順序で指定する必要があります。

次の例は、レンダリング プラグインの HalftonePattern メソッドの実装を示しています。 メソッドは、HTPattern_DDKパターン配列の長さをバイト単位で計算し、パターン配列内のバイトを、このメソッドの pHTPattern パラメーターが指すバッファーにコピーします。 パターン配列には、パターンがすべての色に使用されているか、個別の赤、緑、青のパターンがあるかに応じて、1 つまたは 3 つのパターンを含めることができます。 簡潔にするために、パターン配列のすべての要素が一覧表示されるわけではありません。

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を返す必要があります。

ハーフトーンの詳細については、「ハーフトーン機能の カスタマイズされたハーフトニングオプション属性」を参照してください。

要件

要件
対象プラットフォーム デスクトップ
Header prcomoem.h (Prcomoem.h を含む)

こちらもご覧ください

IPrintOemUni インターフェイス

IPrintOemUni::ImageProcessing