次の方法で共有


IPrintOemUni::ImageProcessing メソッド (prcomoem.h)

このメソッドは IPrintOemUni::ImageProcessing 、Unidrv でサポートされているプリンターと共に使用して、色の書式設定またはハーフトニングを実行するために、イメージ ビットマップ データを変更できます。 メソッドは、変更されたビットマップを Unidrv に返すか、印刷スプーラーに直接送信できます。

構文

HRESULT ImageProcessing(
        PDEVOBJ           pdevobj,
        PBYTE             pSrcBitmap,
        PBITMAPINFOHEADER pBitmapInfoHeader,
        PBYTE             pColorTable,
        DWORD             dwCallbackID,
        PIPPARAMS         pIPParams,
  [out] OUT PBYTE         *ppbResult
);

パラメーター

pdevobj

呼び出し元が指定した DEVOBJ 構造体へのポインター。

pSrcBitmap

入力 DIB への呼び出し元が指定したポインター。

pBitmapInfoHeader

pSrcBitmap によって指されるビットマップを記述する BITMAPINFOHEADER 構造体への呼び出し元指定のポインター。 BITMAPINFOHEADER 構造体については、Microsoft Windows SDKドキュメントで説明されています。

pColorTable

カラー テーブルへの呼び出し元が指定したポインター。 このパラメーターは、出力形式がピクセルあたり 8 ビットの場合にのみ使用されます。 詳細については、「解説」を参照してください。

ビットマップを解釈する場合は、カラー テーブルを調べる必要があります。 Unidrv はビットマップ内の色を変更できますが、カラー テーブルで対応する調整を行い、結果としてネット変更は行われません。 ただし、カラー テーブルの変更を無視し、ビットマップのみを調べると、イメージが正しく印刷されないことがあります。 例については、HT_Get8BPPMaskPalettepPaletteEntry パラメーターの説明を参照してください。

dwCallbackID

ColorMode 機能で現在選択されているオプションの *IPCallbackID 属性に割り当てられた呼び出し元指定の値。 詳細については、「解説」を参照してください。

pIPParams

IPPARAMS 構造体への呼び出し元から提供されるポインター。

[out] ppbResult

バッファーのアドレスを含むメモリの場所へのポインター。 バッファーの内容は、変換された DIB の送信先によって異なります。

このメソッドは、変換された DIB を Unidrv に送り返す予定で、変換に成功した場合は、*ppbResult を変換された DIB を含むバッファーのアドレスに設定し、S_OKを返す必要があります。 変換が失敗した場合、メソッドは *ppbResultNULL に設定し、E_FAILを返す必要があります。

このメソッドが変換された DIB をスプーラーに送信する予定で、変換に成功した場合、メソッドは *ppbResultTRUE に設定し、S_OKを返す必要があります。 変換が失敗した場合、メソッドは *ppbResultFALSE に設定し、E_FAILを返す必要があります。 詳細については、「解説」セクションの「*DevBPP 属性と *DevNumOfPlanes 属性」の説明を参照してください。

戻り値

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

リターン コード 説明
S_OK
操作が成功しました。
E_FAIL
操作が失敗しました。
E_NOTIMPL
このメソッドは実装されていません。
 

ソース ビットマップの特性

変換先ビットマップの特性

注釈

メソッドは IPrintOemUni::ImageProcessing 、イメージ ビットマップを印刷スプーラーに送信する前に変更するために使用されます。 その目的は、Unidrv でサポートされていないカラー モードとハーフトニング メソッドのカスタマイズされたサポートを提供することです。 印刷スプーラーにビットマップを送信するプリンター ドライバー (Unidrv に返送するのではなく) は、プリンターの GPD ファイルで *DevBPP 属性と *DevNumOfPlanes 属性を 0 に設定する必要があります。

メソッドが実装されていて、現在の色形式の GPD ファイル エントリに *IPCallbackID 属性が含まれている場合、Unidrv はビットマップが使用可能になるたびに メソッドを呼び出します。 呼び出しは、GDI がビットマップをレンダリングした後に行われ、スプーラーに送信されます。 (*IPCallbackID 属性の詳細については、「 ColorMode 機能のオプション属性」を参照してください)。

dwCallbackID で指定された現在のカラー モードが Unidrv でサポートされている場合、IPrintOemUni::ImageProcessingメソッドは受信したビットマップに対してハーフトニング操作を実行し、スプールのために Unidrv に返す必要があります。 現在のカラー モードが Unidrv でサポートされていない場合、メソッドはハーフトニング操作を実行し、ビットマップをスプールする必要があります。

メソッドがハーフトニング操作のみを実行している場合は、次の操作を実行する必要があります。

  • IPPARAMS 構造体の pHalftoneOption メンバーによって示されているように、データに対してハーフトニング操作を実行します。
  • 変更したイメージ データを Unidrv に返します。このデータをバッファーに配置し、バッファーのアドレスをメソッドの戻り値として指定します。 返されるバッファーには、 pSrcBitmap によって指されるバッファーを指定することも、ローカルに割り当てられたバッファーを指定することもできます。
Unidrv でのハーフトニング操作のカスタマイズの詳細については、「 カスタマイズされたハーフトニング」を参照してください。

カスタマイズされた色の書式設定を処理するには、メソッドで次の IPrintOemUni::ImageProcessing 操作を行う必要があります。

  • pSrcBitmap パラメーターと pBitmapInfoHeader パラメーター値で記述された DIB データを dwCallbackID で示される色形式に変換します。
  • IPPARAMS 構造体の pHalftoneOption メンバーによって示されているように、データに対してハーフトニング操作を実行します。
  • IPrintOemDriverUni::D rvWriteSpoolBuf メソッドを呼び出して、印刷スプーラーにデータを送信します。
  • IPrintOemDriverUni::D rvXMoveTo メソッドと IPrintOemDriverUni::D rvYMoveTo メソッドを適切に呼び出して、プリンターのカーソル位置を変更します。
Unidrv での色の書式設定操作のカスタマイズの詳細については、「 カスタマイズされた色書式」を参照してください。

dwCallbackID パラメーターは、実行する必要がある色の書式設定の種類 (存在する場合) を示します。 プリンターの GPD ファイル内で、ColorMode 機能の各 *Option エントリはカラー形式を記述します。 メソッドによる処理が必要な形式の IPrintOemUni::ImageProcessing 場合、その *Option エントリには *IPCallbackID 属性が含まれている必要があります。 Unidrv が メソッドを IPrintOemUni::ImageProcessing 呼び出すと、ColorMode 機能で現在選択されているオプションに関連付けられている属性値が提供されます。 この値は dwCallbackID パラメーターの値です。

IPrintOemUni::ImageProcessingメソッドが色の書式設定操作と画像データのスプールを実行しているか、または単にハーフトニング操作を実行し、処理されたビットマップを Unidrv に返す場合でも、宛先ビットマップまたはその他の目的に大量のメモリを割り当てる場合は、IPrintOemUni::MemoryUsage メソッドをエクスポートする必要があります。 そうしないと、システムのパフォーマンスが低下する可能性があります。

メソッドが実装されている場合は、ページ上のすべてのラスター領域に対して呼び出されます。 ただし、リージョンが空白の場合、IPPARAMS 構造体の bBlankBand メンバーは TRUE に設定されます。これは、ブロックが空白であり、データが無効であることを示します。 バンドは、パフォーマンスを最適化するために空白領域と非ブランク領域の交互のブロックに分割できるため、ブロック サイズが常にバンド サイズに対応するとは限りません。

pSrcBitmappBitmapInfoHeader によって記述されるソース ビットマップには、次の特性があります。

  • DIB コンテンツは、トップダウン順および非圧縮です。
  • データ形式は、「色形式の処理」に記載されている 形式です
  • 書式にカラー テーブルが必要な場合、表は pColorTable によって指されます。
  • GDIINFO 構造体の ulPrimaryOrder メンバーの説明で説明されているように、色データはPRIMARY_ORDER_CBA形式です。 つまり、カラー形式が RGB または CMY の場合、最下位 n ビットには青または黄色の値が含まれている必要があり、次の n ビットには緑またはマゼンタ値が含まれている必要があり、次の n ビットには赤またはシアンの値が含まれている必要があります。 未使用のビットは最も重要な位置にあります。 この形式でピクセルあたり 4 ビットを使用する場合、 n は 1 です。 次の図に示すように、ピクセルあたり 24 ビットの 場合、n は 8 です。 CMYK の場合、 n ビットの 4 番目のグループには黒が含まれます。

PRIMARY_ORDER_CBA形式
上の図は、2 ピクセルのカラー データをPRIMARY_ORDER_CBA形式で示し、1 ピクセルあたり 24 ビットのカラー データを示しています。 メモリ不足のアドレスから高メモリ アドレスに移動すると、8 ビットの青いデータ、8 ビットの緑データ、8 ビットの赤いデータが存在し、その後パターンが繰り返されます。 これは、BGR デバイスの出力順序とも呼ばれます。
処理されたビットマップが Unidrv に返されるハーフトニング操作の場合、返されるビットマップには次の特性が必要です。
  • DIB コンテンツは、上から下に並べ替え、非圧縮にする必要があります。
  • データ形式は、「色形式の処理」に記載されている形式である必要があり、dwCallbackID で識別される色形式の *DevBPP および *DevNumOfPlanes 属性と互換性がある必要があります。 (これらの属性の詳細については、「 ColorMode 機能のオプション属性」を参照してください)。
  • 書式にカラー テーブルが必要な場合は、テーブルを作成し、そのアドレスを pColorTable で返す必要があります。
  • ソース ビットマップの説明に従って、色データPRIMARY_ORDER_CBA形式で返す必要があります。
  • pBitmapInfoHeader によって指定される BITMAPINFOHEADER 構造体は、入力ビットマップと出力ビットマップの両方を記述する必要があります。 メソッドは IPrintOemUni::ImageProcessing 構造体の内容を変更できません。
メソッドは IPrintOemUni::ImageProcessing 省略可能です。 レンダリング プラグインがこのメソッドを実装する場合、プラグインの IPrintOemUni::GetImplementedMethod メソッドは、"ImageProcessing" を入力として受け取ったときにS_OKを返す必要があります。

要件

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

こちらもご覧ください

HT_Get8BPPMaskPalette

IPrintOemUni

IPrintOemUni::FilterGraphics