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 つの連続するデータ配列に変換します。
スキャン行のグループを処理し、このデータをプリンターのコマンドに変換します。
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 を含む) |
こちらもご覧ください
IPrintOemDriverUni::D rvWriteSpoolBuf