DrvStretchBltROP 関数 (winddi.h)
DrvStretchBltROP 関数は、ROP を使用してストレッチ ビット ブロック転送を実行します。
構文
BOOL DrvStretchBltROP(
[in, out] SURFOBJ *psoDest,
[in, out] SURFOBJ *psoSrc,
[in, optional] SURFOBJ *psoMask,
[in] CLIPOBJ *pco,
[in, optional] XLATEOBJ *pxlo,
[in, optional] COLORADJUSTMENT *pca,
[in] POINTL *pptlHTOrg,
[in] RECTL *prclDest,
[in] RECTL *prclSrc,
[in, optional] POINTL *pptlMask,
[in] ULONG iMode,
[in] BRUSHOBJ *pbo,
[in] DWORD rop4
);
パラメーター
[in, out] psoDest
描画するサーフェスを記述する SURFOBJ 構造体へのポインター。
[in, out] psoSrc
ビット ブロック転送のソース サーフェスを記述する SURFOBJ 構造体へのポインター。
[in, optional] psoMask
ソースのマスクを定義する SURFOBJ 構造体へのポインター。 マスクは、ピクセルあたり 1 ビットのビットマップであるロジック マップによって定義されます。 通常、マスクは、変換先サーフェスで変更される領域を制限します。 このマスクは、ソース サーフェスと常に同じサイズです。
[in] pco
変換先で変更する領域を制限する CLIPOBJ 構造体へのポインター。 CLIPOBJ_Xxx サービス ルーチンは、 クリップ領域 を一連の四角形として列挙するために提供されます。
可能な限り、GDI は関連するクリッピングを簡略化します。 ただし、 DrvBitBlt とは異なり、 DrvStretchBltROP は 単一のクリッピング四角形で呼び出すことができます。 これにより、出力のクリッピングで丸めエラーが発生するのを防ぐことができます。
[in, optional] pxlo
ソース サーフェスとターゲット サーフェスの間でカラー インデックスを変換する方法を指定する XLATEOBJ 構造体へのポインター。 pxlo が NULL の場合、変換は必要ありません。
この XLATEOBJ 構造体を照会して、任意のソース インデックスの RGB 色を検索することもできます。 高品質のストレッチ ビット ブロック転送では、場合によっては色を補間する必要があります。
[in, optional] pca
ビットをストレッチする前にソース ビットマップに適用する色調整値を定義する COLORADJUSTMENT 構造体へのポインター。 詳細については、Microsoft Windows SDKドキュメントを参照してください。
[in] pptlHTOrg
変換先サーフェス上のハーフトーン ブラシの原点を定義する POINTL 構造体へのポインター。 ハーフトーン ブラシを使用する場合、ドライバーはブラシの左上のピクセルをこのポイントに合わせ、サイズに応じてブラシを繰り返す必要があります。 rop4 パラメーターにパターンが必要ない場合、ドライバーはこのパラメーターを無視する必要があります。
[in] prclDest
変更する四角形領域を定義する RECTL 構造体へのポインター。 この四角形は、変換先サーフェスの座標系で指定され、左上と右下の 2 つの点で定義されます。 四角形を定義する 2 つの点は、常に順序が適切であるとは限りません。つまり、2 番目の点の座標が、必ずしも最初の点の座標よりも大きいとは限りません。 ドライバーは、変換先の四角形が適切に順序付けされていない場合は、2 つの x 値または 2 つの y 値を交換する必要があります。
四角形は右下の排他的です。つまり、下端と右端はコピーの一部ではありません。
DrvStretchBltROP は、空の変換先の四角形で呼び出されることはありません。
[in] prclSrc
コピーする領域を定義する RECTL 構造体へのポインター。 この四角形は、ソース サーフェスの座標系で指定され、左上と右下の 2 つの点で定義されます。 四角形を定義する 2 つの点は、常に適切に並べ替えられます。
四角形は右下の排他的です。つまり、その下端と右端はコピーの一部ではありません。
ドライバーは、この四角形を prclDest によって定義された四角形にマップする必要があります。
[in, optional] pptlMask
prclMask が指すマスク内のピクセルを定義する POINTL 構造体へのポインター。 このピクセルは、 prclSrc がポイントするソース四角形の左上のピクセルに対応します。 マスクが指定されていない場合、ドライバーはこのパラメーターを無視する必要があります。
[in] iMode
ソース ピクセルを結合して出力ピクセルを取得する方法を指定します。 HALFTONE モードは他のモードよりも低速ですが、高品質の画像が生成されます。 このパラメーターには、次のいずれかの値を指定できます。
値 | 意味 |
---|---|
BLACKONWHITE | 縮小ビット ブロック転送では、ピクセルをブール値 AND 演算と組み合わせる必要があります。 ストレッチ ビット ブロック転送では、ピクセルをレプリケートする必要があります。 |
COLORONCOLOR | 縮小ビット ブロック転送では、ピクセルを組み合わせる必要がないように、十分なピクセルを無視する必要があります。 ストレッチ ビット ブロック転送では、ピクセルをレプリケートする必要があります。 |
ハーフトーン | ドライバーは、出力サーフェイスでピクセルのグループを使用して、入力の色または灰色のレベルを最適に近似できます。 |
WHITEONBLACK | 縮小ビット ブロック転送では、ピクセルをブール値 OR 演算と組み合わせる必要があります。 ストレッチ ビット ブロック転送では、ピクセルをレプリケートする必要があります。 |
[in] pbo
ビット ブロック転送のパターンを定義するために使用する BRUSHOBJ 構造体へのポインター。 GDI の BRUSHOBJ_pvGetRbrush サービス ルーチンは、デバイスのブラシの実現を取得します。 rop4 パラメーターにパターンが必要ない場合、ドライバーはこのパラメーターを無視できます。
[in] rop4
マスク、パターン、ソース、およびターゲット ピクセルを結合して出力ピクセルを変換先サーフェスに書き込む方法を定義するラスター演算を表します。
これは第 4 級ラスター演算であり、通常の三項 Rop3 操作の自然な拡張です。 Rop4 には 16 個の関連ビットがあり、Rop3 の 8 つの定義ビットに似ています。 (Rop3 の他の冗長ビットは無視されます)。Rop4 を実装する最も簡単な方法は、2 バイトを個別に考慮することです。 下位バイトは、 psoMask が指すマスクが 1 の場所で計算する必要がある Rop3 を指定します。 高バイトは、マスクが 0 の場合はどこでも計算および適用できる Rop3 を指定します。
戻り値
成功すると、DrvStretchBltROP は TRUE を 返す必要があります。 それ以外の場合は、エラー コードを報告し、 FALSE を返す必要があります。
注釈
マッピングは、 prclSrc と prclDest によって定義されます。 prclDest および prclSrc で指定された点は、ピクセルの中心に対応する整数座標にあります。 このような 2 つの点で定義された四角形は、指定された点を座標とする 2 つの頂点を持つ幾何学的な四角形と見なされますが、各座標から 0.5 が減算されます。 (POINTL 構造体は、これらの小数座標頂点を指定するための短縮表記です)。
ドライバーは、必要に応じて DrvStretchBltROP を実装できます。 ドライバーがこの呼び出しをフックする場合は、 EngStretchBltROP を呼び出して、サポートされていないストレッチ blit 操作を実行できます。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | winddi.h (Winddi.h を含む) |