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

IPrintOemUni::FilterGraphics メソッドは、Unidrv でサポートされているプリンターと共に使用して、スキャン行データを変更し、スプーラーに送信できます。

構文

HRESULT FilterGraphics(
  PDEVOBJ pdevobj,
  PBYTE   pBuf,
  DWORD   dwLen
);

パラメーター

pdevobj

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

pBuf

印刷するスキャン行データを含むバッファーへの呼び出し元指定ポインター。

dwLen

pBuf が指すデータの長さをバイト単位で表す呼び出し元指定値。

戻り値

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

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

注釈

IPrintOemUni::FilterGraphics メソッドは、印刷スプーラーに送信される前にスキャン行データを変更するために使用されます。 メソッドは、受信したデータをスプーラーに送信します。

IPrintOemUni::FilterGraphics メソッドは省略可能です。 レンダリング プラグインがこのメソッドを実装する場合、プラグインの IPrintOemUni::GetImplementedMethod メソッドは、入力として "FilterGraphics" を受け取ったときにS_OKを返す必要があります。

IPrintOemUni::FilterGraphics メソッドが実装されている場合、Unidrv はプリンター データをスプールしません。 代わりに、Unidrv は、イメージ データのバッファーをスプールする準備が整うたびに、このメソッドを呼び出します。

このメソッドが実装されている場合、通常と同様に、Unidrv もプリンター データを圧縮しないことに注意してください。 Unidrv 圧縮を使用する場合は、このメソッドを実装しないでください。 また、 IPrintOemUni::GetImplementedMethod を変更して、文字列 "FilterGraphics" が渡されたときにS_FALSEを返すようにする必要があります。

メソッドは、隣接するドットや Unidrv が提供しないその他のデータ ストリーム フィルター処理操作を削除するなど、画像データの最終的な後処理を実行できます。 その後、 IPrintOemDriverUni::D rvWriteSpoolBuf メソッドを呼び出して、データをスプールする必要があります。

IPrintOemUni::FilterGraphics メソッドは、Unidrv の DrvSendPage 関数によって呼び出されます。 IPrintOemUni::FilterGraphics を実装する場合は、Unidrv の DrvSendPage または DrvNextBand 関数を完全にオーバーライドしないでください。

Unidrv の DrvSendPage 関数がプラグインの IPrintOemUni::FilterGraphics 実装 である DrvSendPage を呼び出す前。

  1. 必要に応じて、レンダリングするビットマップを入れ替えます。

  2. カラー データで構成される出力パスを、1 つの連続するデータ配列に変換します。

  3. スキャン行のグループを処理し、このデータをプリンターのコマンドに変換します。

  4. X/Y 位置を設定し、グラフィックス データの行をプリンターに渡します。

プラグインが IPrintOemUni::FilterGraphics を実装している場合、Unidrv はプリンターに送信するのではなく、スキャンライン データを使用してプラグインを呼び出します。

IPrintOemUni::FilterGraphics メソッドを使用すると、レンダリング プラグインでスキャン行データを変更し、スプーラーに送信できます。 この関数を実装した場合、Unidrv はデータをスプールしません。 代わりに、データのバッファーをスプールしてプリンターに送信する準備が整うたびに、 IPrintOemUni::FilterGraphics が呼び出されます。

IPrintOemUni::FilterGraphics を使用して、特別な圧縮方法を実装したり、プリンターまたはその両方に送信されるデータ ストリームに対してビット操作を実行したりできます。 どのような状況でも、ドライバーの組み込みの圧縮コードは使用されません。 IPrintOemUni::FilterGraphics にはデータ ブロックが表示され、 DrvWriteSpoolBuf 関数を使用してこのデータを出力する必要があります。 コア ドライバー (Unidrv) は、 OEMFilterGraphics を呼び出した後、ラスター データのそれ以上の処理を実行しません。

プラグインで IPrintOemUni::FilterGraphics メソッドを実装すると、ラスター データをプリンターに直接送信するために使用されます。 ブロック内のスキャン行の数は、Resolution 機能に関連付けられている PinsPerPhysPass 属性を使用して指定されます。この属性は省略可能であり、指定しない場合は 1 に設定されます (ほとんどのインクジェット プリンターとページ プリンターの場合と同様)。 それ以外の場合、 PinsPerPhysPass は 8 の倍数である必要があります。 IPrintOemUni::FilterGraphics では、pBuf パラメーターは、必要に応じて操作するスキャン ライン ラスター データ (圧縮など) を含むバッファーを指し、最後に送信します。dwLen パラメーターは、pBuf が指すバッファーの長さです。

次の一覧では、 IPrintOemUni::FilterGraphics を実装するための一般的なシナリオをいくつか示します。

  • 特殊な圧縮手法

  • プリンターに送信する前に受信ラスター データをビット操作する

IPrintOemUni::FilterGraphics は、最終的に DrvWriteSpoolBuf 関数を使用して、すべてのデータをプリンターに送信します。 コア ドライバー (Unidrv) は、 IPrintOemUni::FilterGraphics が送信するデータに対してそれ以上の処理を行いません。プラグインが特別な圧縮またはビット操作を実行している場合、プラグインは特別な圧縮またはビット操作に必要なバッファーを割り当てる必要があります。 プラグインが独自のバッファーを割り当てず、圧縮データがソースよりも小さい場合、出力によってソース バッファーが上書きされます。

IPrintOemUni::FilterGraphics メソッドを使用すると、スキャン ライン データ自体にアクセスでき、ラスター データを後処理できます。

スキャンラインの数は、画像の高さと同じです。 たとえば、各スキャン ラインの 1 ピクセルあたりの 1 ビット (bpp) の太さは 1 ピクセルの幅と等しいため、スキャンラインの数は画像の高さと同じになります。

Unidrv のレンダリング操作のカスタマイズの詳細については、「 Unidrv 固有のカスタマイズされたレンダリング」を参照してください。

要件

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

こちらもご覧ください

DrvNextBand

DrvSendPage

DrvWriteSpoolBuf

IPrintOemDriverUni::D rvWriteSpoolBuf

IPrintOemUni

IPrintOemUni::GetImplementedMethod

OEMFilterGraphics