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 構造体へのポインター。 pxloNULL の場合、変換は必要ありません。

この 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 を指定します。

戻り値

成功すると、DrvStretchBltROPTRUE を 返す必要があります。 それ以外の場合は、エラー コードを報告し、 FALSE を返す必要があります。

注釈

マッピングは、 prclSrcprclDest によって定義されます。 prclDest および prclSrc で指定された点は、ピクセルの中心に対応する整数座標にあります。 このような 2 つの点で定義された四角形は、指定された点を座標とする 2 つの頂点を持つ幾何学的な四角形と見なされますが、各座標から 0.5 が減算されます。 (POINTL 構造体は、これらの小数座標頂点を指定するための短縮表記です)。

ドライバーは、必要に応じて DrvStretchBltROP を実装できます。 ドライバーがこの呼び出しをフックする場合は、 EngStretchBltROP を呼び出して、サポートされていないストレッチ blit 操作を実行できます。

要件

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

こちらもご覧ください

DrvAlphaBlend

DrvBitBlt

DrvPlgBlt

DrvStretchBlt

DrvTransparentBlt

EngAlphaBlend

EngBitBlt

EngPlgBlt

EngStretchBlt

EngStretchBltROP

EngTransparentBlt