メモリ デバイス コンテキスト

アプリケーションが出力を実際のデバイスに送信するのではなくメモリに配置できるようにするには、メモリ デバイス コンテキストと呼ばれるビットマップ操作に特別な デバイス コンテキストを使用します。 メモリ DC を使用すると、システムはメモリの一部を仮想デバイスとして処理できます。 これはメモリ内のビットの配列であり、通常の描画サーフェイスで作成されたビットマップの色データを格納するためにアプリケーションが一時的に使用できます。 ビットマップはデバイスと互換性があるため、メモリ DC は 互換性のあるデバイス コンテキストとも呼ばれます。

メモリ DC には、特定のデバイスのビットマップ イメージが格納されます。 アプリケーションは、 CreateCompatibleDC 関数を呼び出すことによってメモリ DC を作成できます。

メモリ DC の元のビットマップは、単にプレースホルダーです。 その寸法は 1 ピクセル x 1 ピクセルです。 アプリケーションは描画を開始する前に、 SelectObject 関数を呼び出して、適切な幅と高さのビットマップを DC に選択する必要があります。 適切なディメンションのビットマップを作成するには、 CreateBitmapCreateBitmapIndirect、または CreateCompatibleBitmap 関数を 使用します。 ビットマップをメモリ DC に選択した後、システムは単一ビット配列を、指定したピクセルの四角形の色情報を格納するのに十分な大きさの配列に置き換えます。

アプリケーションが CreateCompatibleDC によって返されたハンドルを描画関数の 1 つに渡すと、要求された出力はデバイスの描画サーフェイスには表示されません。 代わりに、システムは結果の行、曲線、テキスト、または領域の色情報をビットの配列に格納します。 アプリケーションでは、 BitBlt 関数を呼び出して、メモリ DC をソース デバイス コンテキストとして、ウィンドウまたは画面 DC をターゲット デバイス コンテキストとして識別することで、メモリに格納されているイメージを描画サーフェイスにコピーできます。

DIB または DIB から作成された DDB をパレット デバイスに表示する場合は、システム パレットのレイアウトに合わせて論理パレットを配置することで、イメージの描画速度を向上させることができます。 これを行うには、NUMRESERVED 値を指定して GetDeviceCaps を呼び出して、システム内の予約済み色の数を取得します。 次 に、GetSystemPaletteEntries を呼び出し、論理パレットの最初と最後の NUMRESERVED/2 エントリに対応するシステム カラーを入力します。 たとえば、NUMRESERVED が 20 の場合、論理パレットの最初と最後の 10 個のエントリにシステム カラーを入力します。 次に、論理パレットの残りの 256 NUMRESERVED 色 (この例では残りの 236 色) に DIB の色を入力し、これらの各色に PC_NOCOLLAPSE フラグを設定します。

色とパレットの詳細については、「 」を参照してください。 ビットマップとビットマップ操作の詳細については、「 ビットマップ」を参照してください。