Share via


サーフェスの種類

サーフェスの種類は、その扱い方のコンテキストで見ることができます。 次のリソースが存在します。

  • エンジンで管理されるサーフェス

  • デバイスで管理されるサーフェス (標準形式のビットマップ)

  • デバイスで管理されるサーフェス (非標準形式のビットマップ)

エンジンで管理されるサーフェス

エンジンで管理されるサーフェス

  • GDI によって作成および管理されます。

  • デバイスに依存しないビットマップ (DIB) として、標準の DIB 形式のいずれかで作成されます。つまり、原点が左上隅にある場合は上から下へ、原点が左下隅にある場合は下から上へです。

  • STYPE_BITMAP 型です。

  • サーフェスに対応するデバイス ハンドルがありません。

標準形式のビットマップは、単一平面のパックされたピクセル (各ピクセルのデータが連続した方法で格納される) 形式のビットマップです。 ビットマップの各スキャン行は、4 バイト境界に配置されます。

EngCreateBitmap 関数で作成されるビットマップは DIB 形式です。 エンジンで管理するには、ビットマップを DIB 形式にする必要があります。

デバイスで管理されるサーフェス (標準形式のビットマップ)

デバイスで管理されるサーフェス

  • デバイス ドライバー の DrvCreateDeviceBitmap 関数の呼び出しによって作成されます。

  • サーフェスへのデバイス ハンドルが関連付けられています (DHSURF の詳細については、「SURFOBJ を参照)。

  • opaque または nonopaque のいずれでもかまいません。

不透明なデバイス管理サーフェスは、GDI にビットマップ形式に関する情報も、ビットマップ内のビットへの参照も含まれていないサーフェスです。 これらの理由から、ドライバーは少なくとも DrvBitBltDrvTextOutDrvStrokePath の関数をサポートする必要があります。 このようなサーフェスの種類は STYPE_DEVBITMAP です。

非閉経デバイス管理サーフェスは、GDI がビットマップ形式に関する情報を持ち、ビットマップ内のビットの位置を認識するサーフェスです。 このため、ドライバーは描画操作を実装する必要はありません。すべての操作を GDI に遅延させます。 このようなサーフェスの種類は SYTPE_BITMAP です。

デバイスで管理される不透明なビットマップを非閉経のビットマップに変換するには、ドライバーが EngModifySurface 関数を呼び出す必要があります。 この呼び出しにより、ドライバーは、メモリ内のビットマップの形式とビットマップの場所を GDI に通知します。

ドライバーにデバイスで管理される DIB サーフェスがある場合、ドライバーは GDI にコールバックして、GDI を画面に描画できます。 独自のサーフェスを管理しているが、DIB を使用しているドライバーは、DIB (EngCreateBitmap 関数を使用して作成) をサーフェスの周りにラップすることで、GDI への呼び出しを参照できます。 次の手順では、ドライバーがデバイスで管理される DIB サーフェスに GDI 描画を適用する方法について説明します。

  1. ドライバーは EngCreateBitmap を呼び出して、DIB エンジンで管理されるサーフェスを作成します。

  2. ドライバーは、デバイスに依存するビットマップ (DDB) サーフェスを作成する EngCreateDeviceBitmap 関数を呼び出し、これはデバイスで管理される DIB サーフェスです。

  3. ドライバーは、エンジンで管理される DIB データをデバイスで管理される DDB データに内部的に保存します。

  4. GDI は常にドライバーを呼び出して、デバイスで管理される DDB データを介してサーフェスと対話します。

  5. ドライバーが GDI から呼び出しを受け取り、呼び出しを処理できない場合 (たとえば、ドライバーは複雑なクリッピングを処理できません)、ドライバーは DDB データに格納されている DIB データを取得し、DIB データを GDI に渡してレンダリングします。

デバイスで管理されるサーフェス (非標準形式のビットマップ)

ドライバーは、デバイスで管理されている DIB 以外のサーフェスを有効にするには、EngCreateDeviceSurface 関数を呼び出して GDI にサーフェスを作成し、ハンドルを返します。 GDI は、ドライバーにアクセスし、描画を制御し、デバイスで管理されるサーフェスから読み取ります。

デバイスに依存するビットマップ (DDB) は、デバイス形式のビットマップとも呼ばれ、DIB 以外のデバイスで管理されるサーフェスのもう 1 つの種類です。 DDB は、VGA ドライバーなどの特定のドライバーがビットマップから画面へのブロック転送をより高速に実装できるようにするためにサポートされています。 DDB を使用すると、ドライバーは画面外表示メモリ内のバンクまたは非 DIB ビットマップに描画することもできます。 DDB が必要な場合、ドライバーは DrvCreateDeviceBitmap 関数をサポートし、EngCreateDeviceBitmap 関数を呼び出して、エンジンがビットマップへのハンドルを返すことができます。