DrvBitBlt 関数 (winddi.h)

DrvBitBlt 関数は、デバイスで管理されるサーフェス間、GDI で管理された標準形式のビットマップ間、またはデバイスで管理されるサーフェスと GDI で管理される標準形式のビットマップの間で、一般的なビット ブロック転送機能を提供します。

構文

BOOL DrvBitBlt(
  [in, out]      SURFOBJ  *psoTrg,
  [in, optional] SURFOBJ  *psoSrc,
  [in, optional] SURFOBJ  *psoMask,
  [in]           CLIPOBJ  *pco,
  [in, optional] XLATEOBJ *pxlo,
  [in]           RECTL    *prclTrg,
  [in, optional] POINTL   *pptlSrc,
  [in, optional] POINTL   *pptlMask,
  [in, optional] BRUSHOBJ *pbo,
  [in, optional] POINTL   *pptlBrush,
  [in]           ROP4     rop4
);

パラメーター

[in, out] psoTrg

描画するサーフェスを記述する SURFOBJ 構造体へのポインター。

[in, optional] psoSrc

rop4 パラメーターで必要な場合は、ビットブロック転送操作のソースを記述する SURFOBJ 構造体へのポインター。

[in, optional] psoMask

rop4 パラメーターのマスクとして使用するサーフェスを記述する SURFOBJ 構造体へのポインター。 マスクは、ピクセルあたり 1 ビットのビットマップです。 通常、マスクは、ターゲット サーフェスで変更される領域を制限するために使用されます。 マスクは、 rop4 パラメーターを0xAACC値に設定することで選択されます。 マスクが0x0000されている場合、ターゲット サーフェスは影響を受けません。

マスクは、コピー先の四角形を覆うのに十分な大きさになります。

このパラメーターが NULL で、 rop4 パラメーターでマスクが必要な場合は、ブラシ内の暗黙的なマスクが使用されます。

[in] pco

変更する領域を制限する CLIPOBJ 構造体へのポインター。 四角形のセットとしてクリップ領域を列挙する GDI サービス (CLIPOBJXxx) が用意されています。 可能な限り、GDI は関連するクリッピングを簡略化します。たとえば、この関数は単一のクリッピング四角形で呼び出されることはありません。 GDI は、この関数を呼び出す前に変換先の四角形をクリップし、追加のクリッピングを不要にします。

[in, optional] pxlo

ソース サーフェスとターゲット サーフェスの間でカラー インデックスを変換する方法を指定する XLATEOBJ 構造体へのポインター。 pxloNULL の場合、変換は必要ありません。

ソース サーフェスがパレットで管理されている場合、その色は RGB 値の参照テーブルへのインデックスによって表されます。 XLATEOBJ 構造体は、デバイス ドライバーがソース インデックスを変換先のカラー インデックスに変換できるようにする変換ベクターに対してクエリを実行できます。

たとえば、ソースが RGB であるのに、コピー先がパレットで管理されている場合、状況はより複雑になります。 この場合、各ソース RGB 値に最も近い一致がターゲット パレットで見つかる必要があります。 ドライバーは、この操作を実行する XLATEOBJ_iXlate サービスを呼び出すことができます。

必要に応じて、ターゲット パレットが既定のデバイス パレットである場合、デバイス ドライバーは色を一致させることができます。

[in] prclTrg

変更する領域を定義する RECTL 構造体へのポインター。 この構造体は、変換先サーフェスの座標系を使用します。 この四角形の下端と右端は、ビット ブロック転送の一部ではありません。つまり、四角形は右下に排他的です。

DrvBitBlt は、空の変換先の四角形で呼び出されることはありません。 四角形を定義する 2 つの点は、常に適切な順序で並べ替えられます。 ただし、マルチモニター システムでは、四角形によってターゲットサーフェスよりも大きな領域が定義される場合があります。 ドライバーは、この四角形をサーフェスと交差させる必要があります。

[in, optional] pptlSrc

ソースが存在する場合は、ソース四角形の左上隅を定義する POINTL 構造体へのポインター。 ソースがない場合、このパラメーターは無視されます。

[in, optional] pptlMask

ソースが存在する場合、マスク内のどのピクセルがソース四角形の左上隅に対応するかを定義する POINTL 構造体へのポインター。 psoMask パラメーターが NULL の場合、このパラメーターは無視されます。

[in, optional] pbo

ビット ブロック転送のパターンを定義する BRUSHOBJ 構造体へのポインター。 GDI の BRUSHOBJ_pvGetRbrush サービスを使用して、デバイスのブラシの実現を取得できます。 rop4 パラメーターにパターンが必要ない場合、このパラメーターは無視されます。

[in, optional] pptlBrush

宛先サーフェス内のブラシの原点を定義する POINTL 構造体へのポインター。 この時点でブラシの左上のピクセルが揃い、サイズに応じてブラシが繰り返されます。 rop4 パラメーターにパターンが必要ない場合、このパラメーターは無視されます。

[in] rop4

マスク、パターン、ソース、およびターゲット ピクセルを結合してターゲット サーフェスに書き込む方法を定義するラスター演算を指定します。

これは、三項 Rop3 操作の拡張である第 4 級ラスター演算です。 Rop4 には 16 個の関連ビットがあり、Rop3 の 8 つの定義ビットに似ています。 Rop4 を実装する最も簡単な方法は、2 バイトを個別に考慮することです。低バイトは、マスクが 1 の場合に計算される Rop3 を指定し、上位バイトはマスクが 0 の場合に計算および適用できる Rop3 を指定します。

戻り値

ビット ブロック転送操作が成功した場合、DrvBitBlt は TRUE を 返します。 それ以外の場合、関数は FALSE を返し、エラー コードがログに記録されます。

注釈

ドライバーが DrvBitBlt をフックする場合、GDI は、いずれかのサーフェスがデバイスで管理されたサーフェスである BitBlt 操作を実行する必要がある場合に、この関数を呼び出します。 ドライバーが不透明なデバイス管理ビットマップを実装する場合は、 DrvBitBlt をフックする必要があります。それ以外の場合、 DrvBitBlt のフックは省略可能です。 ドライバーが指定された呼び出しを処理できない場合は、 EngBitBlt を呼び出すことによって、DIB エンジンにコールバックをパントできます。

GDI の CLIPOBJXxx サービスを使用すると、クリッピングを一連のクリッピング四角形に減らすことができます。 翻訳ベクトルは、パレットの色インデックスの変換を支援します。

メモROP が必要と示す場合を除き、パラメーター ポインターを逆参照しないでください。 たとえば、BLACKNESS などの ROP に対してこれを行うとアクセス違反が発生する可能性があるため、 pbo--->iSolidColor を不必要に逆参照しないでください。 (この規則は、MIX パラメーターを含むすべての関数にも適用されます)。

ドライバーが rop4 パラメーターが 0XCCAA に設定されているこの関数の呼び出しを受け取った場合、ドライバーは EngBitBlt への呼び出しをパントし、呼び出しに応じてデバイスサーフェイスを公開する必要があります。

 
ラスター操作の詳細については、Microsoft Windows SDKのドキュメントを参照してください。

要件

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

こちらもご覧ください

BRUSHOBJ

BRUSHOBJ_pvGetRbrush

CLIPOBJ

DrvSynchronize

EngAssociateSurface

EngBitBlt

EngCreateBitmap

EngCreateDeviceSurface

SURFOBJ

XLATEOBJ

XLATEOBJ_iXlate