Win32 API 日本語リファレンス
ホームGraphics.Direct2D › ID2D1DeviceContext

ID2D1DeviceContext

COM
IIDe8f7fe7a-191c-466d-ad95-975678bda998継承元ID2D1RenderTarget自前メソッド開始 vtbl57

公式ドキュメント

ターゲットへのレンダリングに使用される、一連の状態およびコマンドバッファーを表します。

解説(Remarks)

デバイスコンテキストから作成されたリソースは、両方のコンテキストが同じデバイス上で作成されている場合、別のデバイスコンテキストから作成された任意のリソースと共有できます。

メソッド 35

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 57 HRESULT CreateBitmap(D2D_SIZE_U size, void* sourceData, DWORD pitch, D2D1_BITMAP_PROPERTIES1* bitmapProperties, ID2D1Bitmap1** bitmap)
sizeD2D_SIZE_Uin作成するビットマップのピクセル寸法(幅・高さ)。
sourceDatavoid*inoptional初期化用ピクセルデータへのポインタ。NULL可で未初期化のまま作成する。
pitchDWORDinsourceDataの1行あたりのバイト数(ストライド)。
bitmapPropertiesD2D1_BITMAP_PROPERTIES1*inピクセル形式・DPI・用途を指定する拡張ビットマップ属性へのポインタ。
bitmapID2D1Bitmap1**out作成されたビットマップを受け取る出力ポインタ。
vtbl 58 HRESULT CreateBitmapFromWicBitmap(IWICBitmapSource* wicBitmapSource, D2D1_BITMAP_PROPERTIES1* bitmapProperties, ID2D1Bitmap1** bitmap)
wicBitmapSourceIWICBitmapSource*in変換元となるWICビットマップソースへのポインタ。
bitmapPropertiesD2D1_BITMAP_PROPERTIES1*inoptional拡張ビットマップ属性。NULL可でソースから推定する。
bitmapID2D1Bitmap1**out作成されたビットマップを受け取る出力ポインタ。
vtbl 59 HRESULT CreateColorContext(D2D1_COLOR_SPACE space, BYTE* profile, DWORD profileSize, ID2D1ColorContext** colorContext)

カラーコンテキストを作成します。

spaceD2D1_COLOR_SPACEin作成するカラーコンテキストの空間。
profileBYTE*inoptionalspaceD2D1_COLOR_SPACE_CUSTOM の場合に、カラーコンテキストの初期化に使用される ICC プロファイルのバイト列を格納したバッファー。それ以外の種類の場合、このパラメーターは無視され、NULL を設定してください。
profileSizeDWORDinProfile のサイズ(バイト単位)。
colorContextID2D1ColorContext**outこのメソッドが返るとき、新しいカラーコンテキストオブジェクトへのポインターのアドレスを格納します。

戻り値

Type: HRESULT

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。
E_INVALIDARG 無効な値がメソッドに渡されました。

解説(Remarks)

新しいカラーコンテキストは、D2D1_BITMAP_PROPERTIES1 で使用して、作成されたビットマップのカラーコンテキストを初期化できます。

spaceD2D1_COLOR_SPACE_CUSTOM の場合、profileprofileSize を指定する必要があります。それ以外の場合、これらのパラメーターはそれぞれ NULL および 0 を設定してください。space が D2D1_COLOR_SPACE_CUSTOM の場合、プロファイルヘッダーの model フィールドが検査され、このプロファイルが sRGB か scRGB かが判定され、カラー空間がそれに応じて更新されます。それ以外の場合、space はカスタムのままになります。

vtbl 60 HRESULT CreateColorContextFromFilename(LPWSTR filename, ID2D1ColorContext** colorContext)

指定したファイル名から読み込んでカラーコンテキストを作成します。プロファイルのバイト列は、Filename で指定されたファイルの内容です。

filenameLPWSTRinカラーコンテキストの初期化に使用するプロファイルのバイト列を格納したファイルへのパス。
colorContextID2D1ColorContext**outこのメソッドが返るとき、新しいカラーコンテキストへのポインターのアドレスを格納します。

戻り値

Type: HRESULT

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。
E_INVALIDARG 無効な値がメソッドに渡されました。

解説(Remarks)

新しいカラーコンテキストは、D2D1_BITMAP_PROPERTIES1 で使用して、作成されたビットマップのカラーコンテキストを初期化できます。プロファイルヘッダーの model フィールドが検査され、このプロファイルが sRGB か scRGB かが判定され、カラー空間がそれに応じて更新されます。それ以外の場合、space はカスタムになります。

vtbl 61 HRESULT CreateColorContextFromWicColorContext(IWICColorContext* wicColorContext, ID2D1ColorContext** colorContext)

IWICColorContext からカラーコンテキストを作成します。生成されるコンテキストの D2D1ColorContext space は状況により異なります。詳細は「解説」を参照してください。(ID2D1DeviceContext.CreateColorContextFromWicColorContext)

wicColorContextIWICColorContext*inカラーコンテキストの初期化に使用する IWICColorContext
colorContextID2D1ColorContext**outこのメソッドが返るとき、新しいカラーコンテキストへのポインターのアドレスを格納します。

戻り値

Type: HRESULT

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。
E_INVALIDARG 無効な値がメソッドに渡されました。

解説(Remarks)

新しいカラーコンテキストは、D2D1_BITMAP_PROPERTIES1 で使用して、作成されたビットマップのカラーコンテキストを初期化できます。プロファイルヘッダーの model フィールドが検査され、このプロファイルが sRGB か scRGB かが判定され、カラー空間がそれに応じて更新されます。それ以外の場合、space はカスタムになります。

vtbl 62 HRESULT CreateBitmapFromDxgiSurface(IDXGISurface* surface, D2D1_BITMAP_PROPERTIES1* bitmapProperties, ID2D1Bitmap1** bitmap)
surfaceIDXGISurface*inビットマップ化する元のDXGIサーフェスへのポインタ。
bitmapPropertiesD2D1_BITMAP_PROPERTIES1*inoptional拡張ビットマップ属性。NULL可でサーフェスから推定する。
bitmapID2D1Bitmap1**out作成されたビットマップを受け取る出力ポインタ。
vtbl 63 HRESULT CreateEffect(GUID* effectId, ID2D1Effect** effect)

指定したクラス ID のエフェクトを作成します。

effectIdGUID*in作成するエフェクトのクラス ID。エフェクト ID の一覧については Built-in Effects を参照してください。
effectID2D1Effect**outこのメソッドが返るとき、新しいエフェクトへのポインターのアドレスを格納します。

戻り値

Type: HRESULT

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。
E_INVALIDARG 無効な値がメソッドに渡されました。
D3DERR_OUTOFVIDEOMEMORY Direct3D には、この操作を実行するのに十分なディスプレイメモリがありません。
D2DERR_EFFECT_IS_NOT_REGISTERED 指定されたエフェクトはシステムに登録されていません。
E_NOTFOUND エフェクトが登録されていない場合に返り得るもう一つの HRESULT(D2DERR_EFFECT_IS_NOT_REGISTERED と同様)。
D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES このエフェクトは、D2D デバイスがサポートしていない機能を必要とします。

解説(Remarks)

作成したエフェクトが DLL 内に実装されたカスタムエフェクトである場合でも、その DLL の参照カウントは増加しません。 エフェクトが読み込まれている状態でアプリケーションがそのエフェクトを削除した場合、その結果の動作は予測できません。

vtbl 64 HRESULT CreateGradientStopCollection(D2D1_GRADIENT_STOP* straightAlphaGradientStops, DWORD straightAlphaGradientStopsCount, D2D1_COLOR_SPACE preInterpolationSpace, D2D1_COLOR_SPACE postInterpolationSpace, D2D1_BUFFER_PRECISION bufferPrecision, D2D1_EXTEND_MODE extendMode, D2D1_COLOR_INTERPOLATION_MODE colorInterpolationMode, ID2D1GradientStopCollection1** gradientStopCollection1)

グラデーションストップコレクションを作成します。これにより、グラデーションが [0,1] の範囲外の値を持つカラーチャネルを含められるようになり、また sRGB 空間での補間による高色数レンダーターゲットへのレンダリングも可能になります。

straightAlphaGradientStopsD2D1_GRADIENT_STOP*inカラー値とオフセットの配列。
straightAlphaGradientStopsCountDWORDingradientStops 配列の要素数。
preInterpolationSpaceD2D1_COLOR_SPACEin入力カラー空間と、カラー補間が行われる空間の両方を指定します。
postInterpolationSpaceD2D1_COLOR_SPACEin補間後にカラーが変換される先のカラー空間。
bufferPrecisionD2D1_BUFFER_PRECISIONin

補間された値を保持するために使用されるテクスチャの精度。

Note 基盤となる Direct3D デバイスが要求されたバッファー精度をサポートしていない場合、このメソッドは失敗します。何がサポートされているかを判定するには ID2D1DeviceContext::IsBufferPrecisionSupported を使用してください。
extendModeD2D1_EXTEND_MODEinストップコレクションで定義された範囲外のカラーをどのように決定するかを定義します。
colorInterpolationModeD2D1_COLOR_INTERPOLATION_MODEinカラーがどのように補間されるかを定義します。既定値は D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED です。詳細は「解説」を参照してください。
gradientStopCollection1ID2D1GradientStopCollection1**out新しいグラデーションストップコレクション。

戻り値

Type: HRESULT

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。
E_INVALIDARG 無効な値がメソッドに渡されました。

解説(Remarks)

このメソッドは、カラーストップ間を線形補間します。補間後には、オプションのカラー空間変換が適用されます。このガンマ変換を適用するかどうか、およびどのように適用するかは、補間前および補間後の指定によって決まります。デバイスコンテキストが要求されたバッファー精度をサポートしていない場合、このメソッドは失敗します。

望ましい結果を得るには、入力が正しいカラー空間で指定されていることを確認する必要があります。

補間モードが乗算済み(premultiplied)かストレート(straight)かにかかわらず、カラーは常にストレートアルファで指定する必要があります。補間モードは補間される値にのみ影響します。同様に、ID2D1GradientStopCollection::GetGradientStops が返すストップは常にストレートアルファになります。

D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED を指定した場合、すべてのストップは補間前に乗算済みにされ、その後カラー変換前に乗算解除されます。

Windows 8 以降、このメソッドの補間動作は変更されました。

次の表は、Windows 7 以前での動作を示します。

ガンマ 補間前の動作 補間後の動作 GetColorInteroplationGamma (出力カラー空間)
1.0 入力をクランプしてから sRGB から scRGB に変換します。 補間後に scRGB から sRGB に変換します。 1.0
2.2 入力をクランプします。 処理なし 2.2

次の表は、Windows 8 以降での動作を示します。

ガンマ 補間前の動作 補間後の動作 GetColorInteroplationGamma (出力カラー空間)
sRGB から scRGB へ 処理なし 出力をクランプしてから sRGB から scRGB に変換します。 1.0
scRGB から sRGB へ 処理なし 出力をクランプしてから sRGB から scRGB に変換します。 2.2
sRGB から sRGB へ 処理なし 処理なし 2.2
scRGB から scRGB へ 処理なし 処理なし 1.0
vtbl 65 HRESULT CreateImageBrush(ID2D1Image* image, D2D1_IMAGE_BRUSH_PROPERTIES* imageBrushProperties, D2D1_BRUSH_PROPERTIES* brushProperties, ID2D1ImageBrush** imageBrush)
imageID2D1Image*inoptionalブラシの内容となる画像へのポインタ。
imageBrushPropertiesD2D1_IMAGE_BRUSH_PROPERTIES*inソース矩形や拡張モードを指定する画像ブラシ固有属性へのポインタ。
brushPropertiesD2D1_BRUSH_PROPERTIES*inoptional不透明度と変換を指定する共通ブラシ属性。NULL可で既定値。
imageBrushID2D1ImageBrush**out作成された画像ブラシを受け取る出力ポインタ。
vtbl 66 HRESULT CreateBitmapBrush(ID2D1Bitmap* bitmap, D2D1_BITMAP_BRUSH_PROPERTIES1* bitmapBrushProperties, D2D1_BRUSH_PROPERTIES* brushProperties, ID2D1BitmapBrush1** bitmapBrush)
bitmapID2D1Bitmap*inoptionalブラシの内容となるビットマップへのポインタ。
bitmapBrushPropertiesD2D1_BITMAP_BRUSH_PROPERTIES1*inoptional拡張モードと補間モードを指定する拡張ブラシ属性。NULL可で既定値。
brushPropertiesD2D1_BRUSH_PROPERTIES*inoptional不透明度と変換を指定する共通ブラシ属性。NULL可で既定値。
bitmapBrushID2D1BitmapBrush1**out作成されたビットマップブラシを受け取る出力ポインタ。
vtbl 67 HRESULT CreateCommandList(ID2D1CommandList** commandList)

ID2D1CommandList オブジェクトを作成します。

commandListID2D1CommandList**outこのメソッドが返るとき、コマンドリストへのポインターのアドレスを格納します。

戻り値

Type: HRESULT

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。

解説(Remarks)

ID2D1CommandList は、後で ID2D1DeviceContext::DrawImage やイメージブラシを通じて表示される Direct2D コマンドを格納できます。

vtbl 68 BOOL IsDxgiFormatSupported(DXGI_FORMAT format)

そのフォーマットがデバイスコンテキストでサポートされているかどうかを示します。

formatDXGI_FORMATinチェックする DXGI フォーマット。

戻り値

Type: BOOL

フォーマットがサポートされている場合は TRUE を返します。サポートされていない場合は FALSE を返します。

解説(Remarks)

サポートされているフォーマットは、D2D1_PIXEL_FORMAT 構造体で使用して、ビットマップやレンダーターゲットを作成できます。

Direct2D はすべての DXGI フォーマットをサポートしているわけではありません。ハードウェアによって Direct3D で一定レベルのサポートがある場合でも同様です。

vtbl 69 BOOL IsBufferPrecisionSupported(D2D1_BUFFER_PRECISION bufferPrecision)

バッファー精度が、基盤となる Direct3D デバイスでサポートされているかどうかを示します。

bufferPrecisionD2D1_BUFFER_PRECISIONinチェックするバッファー精度。

戻り値

Type: BOOL

バッファー精度がサポートされている場合は TRUE を返します。サポートされていない場合は FALSE を返します。

vtbl 70 HRESULT GetImageLocalBounds(ID2D1Image* image, D2D_RECT_F* localBounds)

コンテキストのワールド変換を適用せずに、イメージの境界を取得します。

imageID2D1Image*in境界を計算する対象のイメージ。
localBoundsD2D_RECT_F*outこのメソッドが返るとき、デバイス非依存ピクセル(DIP)単位かつローカル空間でのイメージの境界へのポインターを格納します。

戻り値

このメソッドは値を返しません。

解説(Remarks)

イメージの境界には、ワールド変換による乗算は含まれません。ただし、コンテキストの現在の DPI、単位モード、補間モードは反映されます。
ワールド変換を含む境界を取得するには、ID2D1DeviceContext::GetImageWorldBounds を使用してください。

返される境界は、ターゲットオフセット (0,0) と単位行列のワールド変換行列で DrawImage を呼び出した場合に、 どのピクセルが影響を受けるかを反映します。デバイスコンテキストに設定されている現在のクリップ矩形や、コンテキストの現在のターゲットイメージの範囲は反映されません。

vtbl 71 HRESULT GetImageWorldBounds(ID2D1Image* image, D2D_RECT_F* worldBounds)

コンテキストのワールド変換を適用して、イメージの境界を取得します。

imageID2D1Image*in境界を計算する対象のイメージ。
worldBoundsD2D_RECT_F*outこのメソッドが返るとき、デバイス非依存ピクセル(DIP)単位でのイメージの境界へのポインターを格納します。

戻り値

Type: HRESULT

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。
E_INVALIDARG 無効なパラメーターが呼び出し先の関数に渡されました。

解説(Remarks)

イメージの境界は、コンテキストの現在の DPI、単位モード、ワールド変換を反映します。ワールド変換を含まない境界を取得するには、ID2D1DeviceContext::GetImageLocalBounds を使用してください。

返される境界は、同じイメージとターゲットオフセット (0,0) で DrawImage を呼び出した場合に、どのピクセルが影響を受けるかを反映します。デバイスコンテキストに設定されている現在のクリップ矩形や、コンテキストの現在のターゲットイメージの範囲は反映されません。

vtbl 72 HRESULT GetGlyphRunWorldBounds(D2D_POINT_2F baselineOrigin, DWRITE_GLYPH_RUN* glyphRun, DWRITE_MEASURING_MODE measuringMode, D2D_RECT_F* bounds)

デバイスコンテキストの DPI を使用して、グリフランのワールド空間での境界を DIP 単位で取得します。

baselineOriginD2D_POINT_2Finグリフランのベースラインの原点。
glyphRunDWRITE_GLYPH_RUN*inレンダリングするグリフラン。
measuringModeDWRITE_MEASURING_MODEinテキストを整形する際に、グリフメトリクスをどのように使用してテキストを測定するかを示す DirectWrite の測定モード。
boundsD2D_RECT_F*outDIP 単位かつワールド空間でのグリフランの境界。

戻り値

Type: HRESULT

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。
E_INVALIDARG 無効なパラメーターが呼び出し先の関数に渡されました。

解説(Remarks)

イメージの境界は、コンテキストの現在の DPI、単位モード、ワールド変換を反映します。

vtbl 73 void GetDevice(ID2D1Device** device)

デバイスコンテキストに関連付けられているデバイスを取得します。

deviceID2D1Device**outこのメソッドが返るとき、このデバイスコンテキストに関連付けられた Direct2D デバイスへのポインターのアドレスを格納します。

解説(Remarks)

アプリケーションは、以前のレンダーターゲットのコードパスから作成された場合でも、デバイスを取得できます。アプリケーションは ID2D1DeviceContext インターフェイスを使用し、その後 GetDevice を呼び出す必要があります。一連のデバイスコンテキストのすべてのリソースを制御する一部の機能は、ID2D1Device オブジェクト上でのみ維持されます。

vtbl 74 void SetTarget(ID2D1Image* image)

Direct2D デバイスコンテキストが以後レンダリングを行う対象のビットマップまたはコマンドリストを設定します。

imageID2D1Image*inoptionalDirect2D デバイスコンテキストがレンダリングを行う対象のサーフェスまたはコマンドリスト。

解説(Remarks)

ターゲットは、コンテキストが描画中である場合も含め、いつでも変更できます。

ターゲットには、D2D1_BITMAP_OPTIONS_TARGET フラグを指定して作成したビットマップか、またはコマンドリストのいずれかを指定できます。それ以外の種類のイメージはターゲットとして設定できません。たとえば、エフェクトの出力をターゲットに設定することはできません。ターゲットが有効でない場合、コンテキストは D2DERR_INVALID_TARGET エラー状態になります。

SetTarget を使用して、複数のデバイスコンテキストから同時に 1 つのビットマップ/コマンドリストへレンダリングすることはできません。イメージは、BeginDraw/EndDraw の期間内にデバイスコンテキストに一度でも設定されたことがあれば、「レンダリング対象になっている」とみなされます。複数のデバイスコンテキストを通じて 1 つのイメージへレンダリングしようとすると、最初のもの以降のすべてのデバイスコンテキストがエラー状態になります。

イメージを 2 つ目のデバイスコンテキストにアタッチしたい呼び出し元は、まず最初のデバイスコンテキストで EndDraw を呼び出す必要があります。

正しい呼び出し順序の例を次に示します。

pDC1->BeginDraw();
pDC1->SetTarget(pImage);
// …
pDC1->EndDraw();

pDC2->BeginDraw();
pDC2->SetTarget(pImage);
// …
pDC2->EndDraw();

誤った呼び出し順序の例を次に示します。

pDC1->BeginDraw();
pDC2->BeginDraw();

pDC1->SetTarget(pImage);

// ...

pDC1->SetTarget(NULL);

pDC2->SetTarget(pImage); // pImage は pDC1 に設定されていないにもかかわらず、この呼び出しは無効です。

// ...

pDC1->EndDraw(); // この EndDraw は成功します。
pDC2->EndDraw(); // この EndDraw は失敗します。

Note ターゲットを変更しても、HWND レンダーターゲットが表示元とするビットマップは変更されず、また DC レンダーターゲットが blt する対象/元とするビットマップも変更されません。
この API により、アプリケーションはビットマップをソースとして(DrawBitmap などで)使用すると同時に、デスティネーションとしても簡単に使用できます。ビットマップがターゲットとしてバインドされているのと同じデバイスコンテキストで、そのビットマップをソースとして使用しようとすると、デバイスコンテキストは D2DERR_BITMAP_BOUND_AS_TARGET エラー状態になります。

1 つのビットマップを、複数のレンダーターゲットにターゲットビットマップとして同時にバインドすることは許容されます。これを行うアプリケーションは、Flush または EndDraw でレンダリングを適切に同期する必要があります。

ターゲットは、コンテキストが描画中である場合も含め、いつでも変更できます。

ターゲットには NULL を設定できますが、その場合、描画呼び出しによってデバイスコンテキストは D2DERR_WRONG_STATE のエラー状態になります。NULL ターゲットを指定して SetTarget を呼び出しても、元のターゲットビットマップがデバイスコンテキストに復元されることはありません。

デバイスコンテキストに未解放の HDC がある場合、コンテキストは D2DERR_WRONG_STATE エラー状態になります。ターゲットは変更されません。

ビットマップとデバイスコンテキストが同じリソースドメインにない場合、コンテキストは \ エラー状態になります。ターゲットは変更されません。

ID2D1RenderTarget::GetPixelSize は、現在のターゲットビットマップのサイズを返します(バインドされているビットマップがない場合は 0, 0)。 ID2D1RenderTarget::GetSize は、現在のビットマップのピクセルサイズを、レンダーターゲットの DPI でスケーリングして返します。 SetTarget はレンダーターゲットの DPI に影響しません。

ID2D1RenderTarget::GetPixelFormat は、現在のターゲットビットマップのピクセルフォーマットを返します(存在しない場合は DXGI_FORMAT_UNKNOWND2D1_ALPHA_MODE_UNKNOWN)。

ID2D1Bitmap::CopyFromRenderTarget は、現在バインドされているターゲットビットマップからコピーします。

vtbl 75 void GetTarget(ID2D1Image** image)

デバイスコンテキストに現在関連付けられているターゲットを取得します。

imageID2D1Image**outこのメソッドが返るとき、デバイスコンテキストに現在関連付けられているターゲットへのポインターのアドレスを格納します。

解説(Remarks)

ターゲットがデバイスコンテキストに関連付けられていない場合、メソッドが返るとき target には NULL が格納されます。

現在選択されているターゲットがコマンドリストではなくビットマップである場合、アプリケーションは次のいずれかのメソッドを使用して作成された初期ビットマップにアクセスできます。

アプリケーションがこれらのビットマップを破棄することはできません。これらのビットマップはすべて、ビットマップターゲットとしてバインド可能です。ただし、これらのビットマップのすべてが ID2D1RenderTarget メソッドのビットマップソースとして使用できるわけではありません。

CreateDxgiSurfaceRenderTarget は、DXGI サーフェスがシェーダーリソースビューとしてバインド可能な場合、ビットマップソースとして使用できるビットマップを作成します。

CreateCompatibleRenderTarget は、常にビットマップソースとして使用できるビットマップを作成します。

ID2D1RenderTarget::BeginDraw は、HDC から、それに関連付けられた元のビットマップへコピーします。ID2D1RenderTarget::EndDraw は、元のビットマップから HDC へコピーします。

IWICBitmap オブジェクトは、次の状況でロックされます。

IWICBitmap オブジェクトは、次の状況でロック解除されます。 Direct2D は、現在ロックされていないビットマップのみをロックします。

ID2D1GdiInteropRenderTarget に対して QueryInterface を呼び出すと、常に成功します。ID2D1GdiInteropRenderTarget::GetDC は、現在バインドされているターゲットビットマップに対応するデバイスコンテキストを返します。ターゲットビットマップが GDI_COMPATIBLE フラグを設定して作成されていない場合、GetDC は失敗します。

ID2D1HwndRenderTarget::Resize は、レンダーターゲットに関連付けられた元のターゲットビットマップへの未解放の参照がある場合、DXGI_ERROR_INVALID_CALL を返します。

ターゲットはコマンドリストにできますが、それ以外の種類のイメージにはできません。エフェクトの出力イメージにすることもできません。

vtbl 76 void SetRenderingControls(D2D1_RENDERING_CONTROLS* renderingControls)
renderingControlsD2D1_RENDERING_CONTROLS*inタイル割当やバッファ精度などレンダリング制御設定へのポインタ。
vtbl 77 void GetRenderingControls(D2D1_RENDERING_CONTROLS* renderingControls)

コンテキストに適用されているレンダリングコントロールを取得します。

renderingControlsD2D1_RENDERING_CONTROLS*outこのメソッドが返るとき、このコンテキストのレンダリングコントロールへのポインターを格納します。
vtbl 78 void SetPrimitiveBlend(D2D1_PRIMITIVE_BLEND primitiveBlend)

デバイスコンテキストのすべてのレンダリング操作で使用されるプリミティブブレンドモードを変更します。

primitiveBlendD2D1_PRIMITIVE_BLENDin使用するプリミティブブレンド。

解説(Remarks)

プリミティブブレンドは、DrawImage API の compositeMode パラメーターでオーバーライドされない限り、コンテキストに描画されるすべてのプリミティブに適用されます。

プリミティブブレンドは、コンテキストに描画される任意のプリミティブの内部に適用されます。DrawImage の場合、これはイメージの矩形、オフセット、ワールド変換によって暗黙的に決まります。

プリミティブブレンドが D2D1_PRIMITIVE_BLEND_SOURCE_OVER 以外である場合、ClearType レンダリングは無効になります。これらのモードでアプリケーションが明示的に ClearType レンダリングを強制すると、描画コンテキストはエラー状態になります。EndDraw または Flush のいずれかから D2DERR_WRONG_STATE が返されます。

vtbl 79 D2D1_PRIMITIVE_BLEND GetPrimitiveBlend()

デバイスコンテキストが使用する、現在設定されているプリミティブブレンドを返します。

戻り値

Type: D2D1_PRIMITIVE_BLEND

現在のプリミティブブレンド。既定値は D2D1_PRIMITIVE_BLEND_SOURCE_OVER です。

vtbl 80 void SetUnitMode(D2D1_UNIT_MODE unitMode)

デバイスコンテキストに渡される値の解釈に使用する単位を設定します。

unitModeD2D1_UNIT_MODEin渡された単位をデバイスコンテキストがどのように解釈するかを定義する列挙体。

解説(Remarks)

このメソッドは、SetDpi および GetDpi の影響を受けるすべてのプロパティおよびパラメーターに影響します。これは、別の単位であると明示的に定義されていないすべての座標、長さ、 およびその他のプロパティに影響します。たとえば、次のとおりです。

vtbl 81 D2D1_UNIT_MODE GetUnitMode()

デバイスコンテキストが値の解釈に使用しているモードを取得します。

戻り値

Type: D2D1_UNIT_MODE

単位モード。

vtbl 82 void DrawGlyphRun(D2D_POINT_2F baselineOrigin, DWRITE_GLYPH_RUN* glyphRun, DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription, ID2D1Brush* foregroundBrush, DWRITE_MEASURING_MODE measuringMode)

一連のグリフをデバイスコンテキストに描画します。

baselineOriginD2D_POINT_2Fin一連のグリフのうち最初のグリフの原点。
glyphRunDWRITE_GLYPH_RUN*inレンダリングするグリフ。
glyphRunDescriptionDWRITE_GLYPH_RUN_DESCRIPTION*inoptional補足的なグリフシリーズ情報。
foregroundBrushID2D1Brush*inテキストの色を定義するブラシ。
measuringModeDWRITE_MEASURING_MODEinグリフシリーズの測定モード。アドバンスとオフセットの決定に使用されます。既定値は DWRITE_MEASURING_MODE_NATURAL です。

解説(Remarks)

glyphRunDescription はレンダリング時には無視されますが、XPS や SVG ファイルへの出力など、印刷やレンダリングコマンドのシリアル化に役立つ場合があります。これは、グリフランの記述を持たなかった ID2D1RenderTarget::DrawGlyphRun を拡張したものです。

vtbl 83 void DrawImage(ID2D1Image* image, D2D_POINT_2F* targetOffset, D2D_RECT_F* imageRectangle, D2D1_INTERPOLATION_MODE interpolationMode, D2D1_COMPOSITE_MODE compositeMode)
imageID2D1Image*in描画する画像(エフェクト出力等)へのポインタ。
targetOffsetD2D_POINT_2F*inoptional描画先での配置オフセット座標。NULL可で原点配置。
imageRectangleD2D_RECT_F*inoptional画像から取り出す元矩形。NULL可で全体を用いる。
interpolationModeD2D1_INTERPOLATION_MODEin拡縮時の補間方式を指定する列挙値。
compositeModeD2D1_COMPOSITE_MODEin画像の合成モードを指定する列挙値。
vtbl 84 void DrawGdiMetafile(ID2D1GdiMetafile* gdiMetafile, D2D_POINT_2F* targetOffset)
gdiMetafileID2D1GdiMetafile*in描画するGDIメタファイルへのポインタ。
targetOffsetD2D_POINT_2F*inoptional描画先での配置オフセット座標。NULL可で原点配置。
vtbl 85 void DrawBitmap(ID2D1Bitmap* bitmap, D2D_RECT_F* destinationRectangle, FLOAT opacity, D2D1_INTERPOLATION_MODE interpolationMode, D2D_RECT_F* sourceRectangle, D2D_MATRIX_4X4_F* perspectiveTransform)
bitmapID2D1Bitmap*in描画するビットマップへのポインタ。
destinationRectangleD2D_RECT_F*inoptional描画先の矩形。NULL可でビットマップ実寸を原点に配置する。
opacityFLOATin描画時の不透明度。0.0~1.0の浮動小数。
interpolationModeD2D1_INTERPOLATION_MODEin拡縮時の高品質補間方式を指定する列挙値。
sourceRectangleD2D_RECT_F*inoptionalビットマップから取り出す元矩形。NULL可で全体を用いる。
perspectiveTransformD2D_MATRIX_4X4_F*inoptional適用する4x4透視変換行列。NULL可で省略する。
vtbl 86 void PushLayer(D2D1_LAYER_PARAMETERS1* layerParameters, ID2D1Layer* layer)
layerParametersD2D1_LAYER_PARAMETERS1*in境界・マスク・不透明度などレイヤー構成を指定する拡張属性へのポインタ。
layerID2D1Layer*inoptional描画内容を蓄積するレイヤーリソース。NULL可で自動管理させる。
vtbl 87 HRESULT InvalidateEffectInputRectangle(ID2D1Effect* effect, DWORD input, D2D_RECT_F* inputRectangle)

エフェクトの入力の一部が無効であることを示します。このメソッドは複数回呼び出すことができます。

effectID2D1Effect*in無効化するエフェクト。
inputDWORDin入力インデックス。
inputRectangleD2D_RECT_F*in無効化する矩形。

戻り値

Type: HRESULT

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。
E_INVALIDARG 無効なパラメーターが呼び出し先の関数に渡されました。
vtbl 88 HRESULT GetEffectInvalidRectangleCount(ID2D1Effect* effect, DWORD* rectangleCount)

エフェクトに蓄積された無効な出力矩形の数を取得します。

effectID2D1Effect*in無効な矩形をカウントする対象のエフェクト。
rectangleCountDWORD*out返される矩形の数。

戻り値

Type: HRESULT

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。
E_INVALIDARG 無効なパラメーターが呼び出し先の関数に渡されました。
vtbl 89 HRESULT GetEffectInvalidRectangles(ID2D1Effect* effect, D2D_RECT_F* rectangles, DWORD rectanglesCount)

エフェクトが最後に描画され、その後デバイスコンテキストで EndDraw が呼び出されて以降に蓄積された、無効な矩形を取得します。

effectID2D1Effect*in無効な矩形を取得する対象のエフェクト。
rectanglesD2D_RECT_F*outD2D1_RECT_F 構造体の配列。これは正しいサイズで割り当てる必要があります。無効な矩形の数は GetEffectInvalidRectangleCount メソッドを使用して取得できます。
rectanglesCountDWORDin取得する矩形の数。

戻り値

Type: HRESULT

このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。

HRESULT 説明
S_OK エラーは発生しませんでした。
E_OUTOFMEMORY Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。
E_INVALIDARG 無効なパラメーターが呼び出し先の関数に渡されました。

解説(Remarks)

Note Direct2D は、これらの無効な矩形を、レンダリングされるエフェクトの領域を縮小するために自動的に使用することはありません。

InvalidateEffectInputRectangle メソッドを使用すると、Direct2D がエフェクトグラフを通じて伝播させる無効化矩形を指定できます。

複数の無効な矩形が要求された場合、このメソッドが返す矩形は重なり合うことがあります。その場合、矩形の数は GetEffectInvalidRectangleCount が返す数より少なくなることがあります。

vtbl 90 HRESULT GetEffectRequiredInputRectangles(ID2D1Effect* renderEffect, D2D_RECT_F* renderImageRectangle, D2D1_EFFECT_INPUT_DESCRIPTION* inputDescriptions, D2D_RECT_F* requiredInputRects, DWORD inputCount)

指定された出力矩形を生成するために、呼び出し元が供給する必要のある入力矩形を返します。

renderEffectID2D1Effect*in出力がレンダリングされる対象のイメージ。
renderImageRectangleD2D_RECT_F*inoptional入力が検査される対象となる、出力イメージの部分。
inputDescriptionsD2D1_EFFECT_INPUT_DESCRIPTION*in矩形が照会される対象の入力の一覧。
requiredInputRectsD2D_RECT_F*out呼び出し元に返される入力矩形。
inputCountDWORDin入力の数。

戻り値

Type: HRESULT

失敗コード。通常、これはチェーン内のエフェクトが何らかのエラーを返した場合にのみ発生します。

解説(Remarks)

呼び出し元は、返された必須入力矩形に依存しないよう十分に注意する必要があります。 エフェクトの動作に対する正確性のための小さな変更によって、返される矩形が異なる場合があります。 さらに、レンダー内部で適用されるさまざまな種類の最適化も、結果に影響を与える可能性があります。

vtbl 91 void FillOpacityMask(ID2D1Bitmap* opacityMask, ID2D1Brush* brush, D2D_RECT_F* destinationRectangle, D2D_RECT_F* sourceRectangle)
opacityMaskID2D1Bitmap*inアルファ値をマスクとして用いるビットマップへのポインタ。
brushID2D1Brush*inマスクを通して塗る色を提供するブラシへのポインタ。
destinationRectangleD2D_RECT_F*inoptional描画先の矩形。NULL可で原点配置となる。
sourceRectangleD2D_RECT_F*inoptionalマスクから取り出す元矩形。NULL可で全体を用いる。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_ID2D1DeviceContext "{E8F7FE7A-191C-466D-AD95-975678BDA998}"
#usecom global ID2D1DeviceContext IID_ID2D1DeviceContext "{}"
#comfunc global ID2D1DeviceContext_CreateBitmap                           57 int,sptr,int,var,sptr
#comfunc global ID2D1DeviceContext_CreateBitmapFromWicBitmap              58 sptr,var,sptr
#comfunc global ID2D1DeviceContext_CreateColorContext                     59 int,var,int,sptr
#comfunc global ID2D1DeviceContext_CreateColorContextFromFilename         60 wstr,sptr
#comfunc global ID2D1DeviceContext_CreateColorContextFromWicColorContext  61 sptr,sptr
#comfunc global ID2D1DeviceContext_CreateBitmapFromDxgiSurface            62 sptr,var,sptr
#comfunc global ID2D1DeviceContext_CreateEffect                           63 var,sptr
#comfunc global ID2D1DeviceContext_CreateGradientStopCollection           64 var,int,int,int,int,int,int,sptr
#comfunc global ID2D1DeviceContext_CreateImageBrush                       65 sptr,var,var,sptr
#comfunc global ID2D1DeviceContext_CreateBitmapBrush                      66 sptr,var,var,sptr
#comfunc global ID2D1DeviceContext_CreateCommandList                      67 sptr
#comfunc global ID2D1DeviceContext_IsDxgiFormatSupported                  68 int
#comfunc global ID2D1DeviceContext_IsBufferPrecisionSupported             69 int
#comfunc global ID2D1DeviceContext_GetImageLocalBounds                    70 sptr,var
#comfunc global ID2D1DeviceContext_GetImageWorldBounds                    71 sptr,var
#comfunc global ID2D1DeviceContext_GetGlyphRunWorldBounds                 72 int,var,int,var
#comfunc global ID2D1DeviceContext_GetDevice                              73 sptr
#comfunc global ID2D1DeviceContext_SetTarget                              74 sptr
#comfunc global ID2D1DeviceContext_GetTarget                              75 sptr
#comfunc global ID2D1DeviceContext_SetRenderingControls                   76 var
#comfunc global ID2D1DeviceContext_GetRenderingControls                   77 var
#comfunc global ID2D1DeviceContext_SetPrimitiveBlend                      78 int
#comfunc global ID2D1DeviceContext_GetPrimitiveBlend                      79
#comfunc global ID2D1DeviceContext_SetUnitMode                            80 int
#comfunc global ID2D1DeviceContext_GetUnitMode                            81
#comfunc global ID2D1DeviceContext_DrawGlyphRun                           82 int,var,var,sptr,int
#comfunc global ID2D1DeviceContext_DrawImage                              83 sptr,var,var,int,int
#comfunc global ID2D1DeviceContext_DrawGdiMetafile                        84 sptr,var
#comfunc global ID2D1DeviceContext_DrawBitmap                             85 sptr,var,float,int,var,var
#comfunc global ID2D1DeviceContext_PushLayer                              86 var,sptr
#comfunc global ID2D1DeviceContext_InvalidateEffectInputRectangle         87 sptr,int,var
#comfunc global ID2D1DeviceContext_GetEffectInvalidRectangleCount         88 sptr,var
#comfunc global ID2D1DeviceContext_GetEffectInvalidRectangles             89 sptr,var,int
#comfunc global ID2D1DeviceContext_GetEffectRequiredInputRectangles       90 sptr,var,var,var,int
#comfunc global ID2D1DeviceContext_FillOpacityMask                        91 sptr,sptr,var,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。