ID2D1DCRenderTarget インターフェイス (d2d1.h)
GDI デバイス コンテキストへのコマンドの描画を発行します。
継承
ID2D1DCRenderTarget インターフェイスは、ID2D1RenderTarget から継承されます。 ID2D1DCRenderTarget には、次の種類のメンバーもあります。
メソッド
ID2D1DCRenderTarget インターフェイスには、これらのメソッドがあります。
ID2D1DCRenderTarget::BindDC 描画コマンドを発行するデバイス コンテキストにレンダー ターゲットをバインドします。 |
解説
ID2D1DCRenderTarget オブジェクトの作成
ID2D1DCRenderTarget を作成するには、ID2D1Factory::CreateDCRenderTarget メソッドを使用します。DC レンダー ターゲットでレンダリングするには、その BindDC メソッドを使用して GDI DC に関連付ける必要があります。 これを行うには、別の DC を使用するか、変更に描画する領域のサイズを使用するたびに行います。
DC レンダー ターゲットが GDI を操作できるようにするには、ピクセル形式を DXGI_FORMAT_B8G8R8A8_UNORM に設定し、アルファ モードを D2D1_ALPHA_MODE_PREMULTIPLIED または D2D1_ALPHA_MODE_IGNORE に設定します。
アプリケーションでレンダー ターゲットを 1 回作成し、アプリケーションの有効期間中、またはレンダー ターゲットの EndDraw メソッドが D2DERR_RECREATE_TARGET エラーを返すまで保持する必要があります。 このエラーが発生した場合は、レンダー ターゲット (および作成したリソース) を再作成する必要があります。
WINDOWS の ID2D1DCRenderTargets、GDI 変換、および右から左への言語ビルド
ID2D1DCRenderTarget を使用すると、Direct2D コンテンツが内部ビットマップにレンダリングされ、GDI を使用して DC にビットマップがレンダリングされます。GDI では、( SetWorldTransform メソッドを使用して) GDI 変換またはその他の効果をレンダー ターゲットで使用されるのと同じ DC に適用できます。この場合、GDI は Direct2D によって生成されたビットマップを変換します。 GDI 変換を使用して Direct2D コンテンツを変換すると、アンチエイリアシングとサブピクセル配置が既に計算されているビットマップを変換するため、出力のビジュアル品質が低下する可能性があります。
たとえば、レンダリング ターゲットを使用して、アンチエイリアシングされたジオメトリとテキストを含むシーンを描画するとします。 GDI 変換を使用して DC にスケール変換を適用し、シーンを 10 倍大きくするようにスケーリングすると、ピクセル化とジャグエッジが表示されます。 (ただし、Direct2D を使用して同様の変換を適用した場合、シーンのビジュアル品質は低下しません)。
場合によっては、GDI が Direct2D コンテンツの品質を低下させる可能性のある追加処理を実行していることは明らかでない場合があります。 たとえば、Windows の右から左 (RTL) ビルドでは、GDI がコピー先にコピーすると、 ID2D1DCRenderTarget によってレンダリングされるコンテンツが水平方向に反転される可能性があります。 コンテンツが実際に反転されるかどうかは、DC の現在の設定によって異なります。
レンダリングされるコンテンツの種類によっては、反転を防ぐことができます。 Direct2D コンテンツに ClearType テキストが含まれている場合、この反転によってテキストの品質が低下します。
SETLayout GDI 関数を使用して、RTL レンダリング動作を制御できます。 ミラーリングを防ぐには、 SetLayout GDI 関数を呼び出し、次の例に示すように 、 2 番目のパラメーターの唯一の値として LAYOUT_BITMAPORIENTATIONPRESERVED を指定します ( LAYOUT_RTLと組み合わせないでください)。
SetLayout(m_hwnd, LAYOUT_BITMAPORIENTATIONPRESERVED);
例
次のコードでは、DC レンダー ターゲットを作成します。
// Create a DC render target.
D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties(
D2D1_RENDER_TARGET_TYPE_DEFAULT,
D2D1::PixelFormat(
DXGI_FORMAT_B8G8R8A8_UNORM,
D2D1_ALPHA_MODE_IGNORE),
0,
0,
D2D1_RENDER_TARGET_USAGE_NONE,
D2D1_FEATURE_LEVEL_DEFAULT
);
hr = m_pD2DFactory->CreateDCRenderTarget(&props, &m_pDCRT);
前のコードでは、 m_pD2DFactory は ID2D1Factory へのポインターであり、 m_pDCRT は ID2D1DCRenderTarget へのポインターです。
次のコード例では、DC を ID2D1DCRenderTarget にバインドします。
HRESULT DemoApp::OnRender(const PAINTSTRUCT &ps)
{
// Get the dimensions of the client drawing area.
GetClientRect(m_hwnd, &rc);
// Bind the DC to the DC render target.
hr = m_pDCRT->BindDC(ps.hdc, &rc);
Direct2D で GDI を使用する方法の詳細については、「 Direct2D と GDI 相互運用の概要」を参照してください。
要件
サポートされている最小のクライアント | Windows 7、Windows Vista SP2 および Windows Vista 用プラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2008 R2、Windows Server 2008 SP2 および Windows Server 2008 用プラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | d2d1.h |