ID2D1DeviceContext
COM公式ドキュメント
ターゲットへのレンダリングに使用される、一連の状態およびコマンドバッファーを表します。
解説(Remarks)
デバイスコンテキストから作成されたリソースは、両方のコンテキストが同じデバイス上で作成されている場合、別のデバイスコンテキストから作成された任意のリソースと共有できます。
メソッド 35
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
| size | D2D_SIZE_U | in | 作成するビットマップのピクセル寸法(幅・高さ)。 |
| sourceData | void* | inoptional | 初期化用ピクセルデータへのポインタ。NULL可で未初期化のまま作成する。 |
| pitch | DWORD | in | sourceDataの1行あたりのバイト数(ストライド)。 |
| bitmapProperties | D2D1_BITMAP_PROPERTIES1* | in | ピクセル形式・DPI・用途を指定する拡張ビットマップ属性へのポインタ。 |
| bitmap | ID2D1Bitmap1** | out | 作成されたビットマップを受け取る出力ポインタ。 |
| wicBitmapSource | IWICBitmapSource* | in | 変換元となるWICビットマップソースへのポインタ。 |
| bitmapProperties | D2D1_BITMAP_PROPERTIES1* | inoptional | 拡張ビットマップ属性。NULL可でソースから推定する。 |
| bitmap | ID2D1Bitmap1** | out | 作成されたビットマップを受け取る出力ポインタ。 |
カラーコンテキストを作成します。
| space | D2D1_COLOR_SPACE | in | 作成するカラーコンテキストの空間。 |
| profile | BYTE* | inoptional | space が D2D1_COLOR_SPACE_CUSTOM の場合に、カラーコンテキストの初期化に使用される ICC プロファイルのバイト列を格納したバッファー。それ以外の種類の場合、このパラメーターは無視され、NULL を設定してください。 |
| profileSize | DWORD | in | Profile のサイズ(バイト単位)。 |
| colorContext | ID2D1ColorContext** | out | このメソッドが返るとき、新しいカラーコンテキストオブジェクトへのポインターのアドレスを格納します。 |
戻り値
Type: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| E_INVALIDARG | 無効な値がメソッドに渡されました。 |
解説(Remarks)
新しいカラーコンテキストは、D2D1_BITMAP_PROPERTIES1 で使用して、作成されたビットマップのカラーコンテキストを初期化できます。
space が D2D1_COLOR_SPACE_CUSTOM の場合、profile と profileSize を指定する必要があります。それ以外の場合、これらのパラメーターはそれぞれ NULL および 0 を設定してください。space が D2D1_COLOR_SPACE_CUSTOM の場合、プロファイルヘッダーの model フィールドが検査され、このプロファイルが sRGB か scRGB かが判定され、カラー空間がそれに応じて更新されます。それ以外の場合、space はカスタムのままになります。
指定したファイル名から読み込んでカラーコンテキストを作成します。プロファイルのバイト列は、Filename で指定されたファイルの内容です。
| filename | LPWSTR | in | カラーコンテキストの初期化に使用するプロファイルのバイト列を格納したファイルへのパス。 |
| colorContext | ID2D1ColorContext** | out | このメソッドが返るとき、新しいカラーコンテキストへのポインターのアドレスを格納します。 |
戻り値
Type: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| E_INVALIDARG | 無効な値がメソッドに渡されました。 |
解説(Remarks)
新しいカラーコンテキストは、D2D1_BITMAP_PROPERTIES1 で使用して、作成されたビットマップのカラーコンテキストを初期化できます。プロファイルヘッダーの model フィールドが検査され、このプロファイルが sRGB か scRGB かが判定され、カラー空間がそれに応じて更新されます。それ以外の場合、space はカスタムになります。
IWICColorContext からカラーコンテキストを作成します。生成されるコンテキストの D2D1ColorContext space は状況により異なります。詳細は「解説」を参照してください。(ID2D1DeviceContext.CreateColorContextFromWicColorContext)
| wicColorContext | IWICColorContext* | in | カラーコンテキストの初期化に使用する IWICColorContext。 |
| colorContext | ID2D1ColorContext** | out | このメソッドが返るとき、新しいカラーコンテキストへのポインターのアドレスを格納します。 |
戻り値
Type: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| E_INVALIDARG | 無効な値がメソッドに渡されました。 |
解説(Remarks)
新しいカラーコンテキストは、D2D1_BITMAP_PROPERTIES1 で使用して、作成されたビットマップのカラーコンテキストを初期化できます。プロファイルヘッダーの model フィールドが検査され、このプロファイルが sRGB か scRGB かが判定され、カラー空間がそれに応じて更新されます。それ以外の場合、space はカスタムになります。
| surface | IDXGISurface* | in | ビットマップ化する元のDXGIサーフェスへのポインタ。 |
| bitmapProperties | D2D1_BITMAP_PROPERTIES1* | inoptional | 拡張ビットマップ属性。NULL可でサーフェスから推定する。 |
| bitmap | ID2D1Bitmap1** | out | 作成されたビットマップを受け取る出力ポインタ。 |
指定したクラス ID のエフェクトを作成します。
| effectId | GUID* | in | 作成するエフェクトのクラス ID。エフェクト ID の一覧については Built-in Effects を参照してください。 |
| effect | ID2D1Effect** | 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 の参照カウントは増加しません。 エフェクトが読み込まれている状態でアプリケーションがそのエフェクトを削除した場合、その結果の動作は予測できません。
グラデーションストップコレクションを作成します。これにより、グラデーションが [0,1] の範囲外の値を持つカラーチャネルを含められるようになり、また sRGB 空間での補間による高色数レンダーターゲットへのレンダリングも可能になります。
| straightAlphaGradientStops | D2D1_GRADIENT_STOP* | in | カラー値とオフセットの配列。 |
| straightAlphaGradientStopsCount | DWORD | in | gradientStops 配列の要素数。 |
| preInterpolationSpace | D2D1_COLOR_SPACE | in | 入力カラー空間と、カラー補間が行われる空間の両方を指定します。 |
| postInterpolationSpace | D2D1_COLOR_SPACE | in | 補間後にカラーが変換される先のカラー空間。 |
| bufferPrecision | D2D1_BUFFER_PRECISION | in | 補間された値を保持するために使用されるテクスチャの精度。 Note 基盤となる Direct3D デバイスが要求されたバッファー精度をサポートしていない場合、このメソッドは失敗します。何がサポートされているかを判定するには ID2D1DeviceContext::IsBufferPrecisionSupported を使用してください。
|
| extendMode | D2D1_EXTEND_MODE | in | ストップコレクションで定義された範囲外のカラーをどのように決定するかを定義します。 |
| colorInterpolationMode | D2D1_COLOR_INTERPOLATION_MODE | in | カラーがどのように補間されるかを定義します。既定値は D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED です。詳細は「解説」を参照してください。 |
| gradientStopCollection1 | ID2D1GradientStopCollection1** | 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 |
| image | ID2D1Image* | inoptional | ブラシの内容となる画像へのポインタ。 |
| imageBrushProperties | D2D1_IMAGE_BRUSH_PROPERTIES* | in | ソース矩形や拡張モードを指定する画像ブラシ固有属性へのポインタ。 |
| brushProperties | D2D1_BRUSH_PROPERTIES* | inoptional | 不透明度と変換を指定する共通ブラシ属性。NULL可で既定値。 |
| imageBrush | ID2D1ImageBrush** | out | 作成された画像ブラシを受け取る出力ポインタ。 |
| bitmap | ID2D1Bitmap* | inoptional | ブラシの内容となるビットマップへのポインタ。 |
| bitmapBrushProperties | D2D1_BITMAP_BRUSH_PROPERTIES1* | inoptional | 拡張モードと補間モードを指定する拡張ブラシ属性。NULL可で既定値。 |
| brushProperties | D2D1_BRUSH_PROPERTIES* | inoptional | 不透明度と変換を指定する共通ブラシ属性。NULL可で既定値。 |
| bitmapBrush | ID2D1BitmapBrush1** | out | 作成されたビットマップブラシを受け取る出力ポインタ。 |
ID2D1CommandList オブジェクトを作成します。
| commandList | ID2D1CommandList** | out | このメソッドが返るとき、コマンドリストへのポインターのアドレスを格納します。 |
戻り値
Type: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
解説(Remarks)
ID2D1CommandList は、後で ID2D1DeviceContext::DrawImage やイメージブラシを通じて表示される Direct2D コマンドを格納できます。
そのフォーマットがデバイスコンテキストでサポートされているかどうかを示します。
| format | DXGI_FORMAT | in | チェックする DXGI フォーマット。 |
戻り値
Type: BOOL
フォーマットがサポートされている場合は TRUE を返します。サポートされていない場合は FALSE を返します。
解説(Remarks)
サポートされているフォーマットは、D2D1_PIXEL_FORMAT 構造体で使用して、ビットマップやレンダーターゲットを作成できます。
Direct2D はすべての DXGI フォーマットをサポートしているわけではありません。ハードウェアによって Direct3D で一定レベルのサポートがある場合でも同様です。
バッファー精度が、基盤となる Direct3D デバイスでサポートされているかどうかを示します。
| bufferPrecision | D2D1_BUFFER_PRECISION | in | チェックするバッファー精度。 |
戻り値
Type: BOOL
バッファー精度がサポートされている場合は TRUE を返します。サポートされていない場合は FALSE を返します。
コンテキストのワールド変換を適用せずに、イメージの境界を取得します。
| image | ID2D1Image* | in | 境界を計算する対象のイメージ。 |
| localBounds | D2D_RECT_F* | out | このメソッドが返るとき、デバイス非依存ピクセル(DIP)単位かつローカル空間でのイメージの境界へのポインターを格納します。 |
戻り値
このメソッドは値を返しません。
解説(Remarks)
イメージの境界には、ワールド変換による乗算は含まれません。ただし、コンテキストの現在の DPI、単位モード、補間モードは反映されます。
ワールド変換を含む境界を取得するには、ID2D1DeviceContext::GetImageWorldBounds を使用してください。
返される境界は、ターゲットオフセット (0,0) と単位行列のワールド変換行列で DrawImage を呼び出した場合に、 どのピクセルが影響を受けるかを反映します。デバイスコンテキストに設定されている現在のクリップ矩形や、コンテキストの現在のターゲットイメージの範囲は反映されません。
コンテキストのワールド変換を適用して、イメージの境界を取得します。
| image | ID2D1Image* | in | 境界を計算する対象のイメージ。 |
| worldBounds | D2D_RECT_F* | out | このメソッドが返るとき、デバイス非依存ピクセル(DIP)単位でのイメージの境界へのポインターを格納します。 |
戻り値
Type: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| E_INVALIDARG | 無効なパラメーターが呼び出し先の関数に渡されました。 |
解説(Remarks)
イメージの境界は、コンテキストの現在の DPI、単位モード、ワールド変換を反映します。ワールド変換を含まない境界を取得するには、ID2D1DeviceContext::GetImageLocalBounds を使用してください。
返される境界は、同じイメージとターゲットオフセット (0,0) で DrawImage を呼び出した場合に、どのピクセルが影響を受けるかを反映します。デバイスコンテキストに設定されている現在のクリップ矩形や、コンテキストの現在のターゲットイメージの範囲は反映されません。
デバイスコンテキストの DPI を使用して、グリフランのワールド空間での境界を DIP 単位で取得します。
| baselineOrigin | D2D_POINT_2F | in | グリフランのベースラインの原点。 |
| glyphRun | DWRITE_GLYPH_RUN* | in | レンダリングするグリフラン。 |
| measuringMode | DWRITE_MEASURING_MODE | in | テキストを整形する際に、グリフメトリクスをどのように使用してテキストを測定するかを示す DirectWrite の測定モード。 |
| bounds | D2D_RECT_F* | out | DIP 単位かつワールド空間でのグリフランの境界。 |
戻り値
Type: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| E_INVALIDARG | 無効なパラメーターが呼び出し先の関数に渡されました。 |
解説(Remarks)
イメージの境界は、コンテキストの現在の DPI、単位モード、ワールド変換を反映します。
デバイスコンテキストに関連付けられているデバイスを取得します。
| device | ID2D1Device** | out | このメソッドが返るとき、このデバイスコンテキストに関連付けられた Direct2D デバイスへのポインターのアドレスを格納します。 |
解説(Remarks)
アプリケーションは、以前のレンダーターゲットのコードパスから作成された場合でも、デバイスを取得できます。アプリケーションは ID2D1DeviceContext インターフェイスを使用し、その後 GetDevice を呼び出す必要があります。一連のデバイスコンテキストのすべてのリソースを制御する一部の機能は、ID2D1Device オブジェクト上でのみ維持されます。
Direct2D デバイスコンテキストが以後レンダリングを行う対象のビットマップまたはコマンドリストを設定します。
| image | ID2D1Image* | inoptional | Direct2D デバイスコンテキストがレンダリングを行う対象のサーフェスまたはコマンドリスト。 |
解説(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 は失敗します。
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_UNKNOWN、D2D1_ALPHA_MODE_UNKNOWN)。
ID2D1Bitmap::CopyFromRenderTarget は、現在バインドされているターゲットビットマップからコピーします。
デバイスコンテキストに現在関連付けられているターゲットを取得します。
| image | ID2D1Image** | out | このメソッドが返るとき、デバイスコンテキストに現在関連付けられているターゲットへのポインターのアドレスを格納します。 |
解説(Remarks)
ターゲットがデバイスコンテキストに関連付けられていない場合、メソッドが返るとき target には NULL が格納されます。
現在選択されているターゲットがコマンドリストではなくビットマップである場合、アプリケーションは次のいずれかのメソッドを使用して作成された初期ビットマップにアクセスできます。
- CreateHwndRenderTarget
- CreateDxgiSurfaceRenderTarget
- CreateWicBitmapRenderTarget
- CreateDCRenderTarget
- CreateCompatibleRenderTarget
CreateDxgiSurfaceRenderTarget は、DXGI サーフェスがシェーダーリソースビューとしてバインド可能な場合、ビットマップソースとして使用できるビットマップを作成します。
CreateCompatibleRenderTarget は、常にビットマップソースとして使用できるビットマップを作成します。
ID2D1RenderTarget::BeginDraw は、HDC から、それに関連付けられた元のビットマップへコピーします。ID2D1RenderTarget::EndDraw は、元のビットマップから HDC へコピーします。
IWICBitmap オブジェクトは、次の状況でロックされます。
- BeginDraw が呼び出されており、現在選択されているターゲットビットマップが WIC ビットマップである場合。
- BeginDraw が呼び出された後、EndDraw が呼び出される前に、WIC ビットマップがデバイスコンテキストのターゲットとして設定された場合。
- ID2D1Bitmap::Copy* メソッドのいずれかが、WIC ビットマップをソースまたはデスティネーションとして呼び出された場合。
- EndDraw が呼び出され、現在選択されているターゲットビットマップが WIC ビットマップである場合。
- BeginDraw と EndDraw の呼び出しの間に、WIC ビットマップがデバイスコンテキストのターゲットから外された場合。
- ID2D1Bitmap::Copy* メソッドのいずれかが、WIC ビットマップをソースまたはデスティネーションとして呼び出された場合。
ID2D1GdiInteropRenderTarget に対して QueryInterface を呼び出すと、常に成功します。ID2D1GdiInteropRenderTarget::GetDC は、現在バインドされているターゲットビットマップに対応するデバイスコンテキストを返します。ターゲットビットマップが GDI_COMPATIBLE フラグを設定して作成されていない場合、GetDC は失敗します。
ID2D1HwndRenderTarget::Resize は、レンダーターゲットに関連付けられた元のターゲットビットマップへの未解放の参照がある場合、DXGI_ERROR_INVALID_CALL を返します。
ターゲットはコマンドリストにできますが、それ以外の種類のイメージにはできません。エフェクトの出力イメージにすることもできません。
| renderingControls | D2D1_RENDERING_CONTROLS* | in | タイル割当やバッファ精度などレンダリング制御設定へのポインタ。 |
コンテキストに適用されているレンダリングコントロールを取得します。
| renderingControls | D2D1_RENDERING_CONTROLS* | out | このメソッドが返るとき、このコンテキストのレンダリングコントロールへのポインターを格納します。 |
デバイスコンテキストのすべてのレンダリング操作で使用されるプリミティブブレンドモードを変更します。
| primitiveBlend | D2D1_PRIMITIVE_BLEND | in | 使用するプリミティブブレンド。 |
解説(Remarks)
プリミティブブレンドは、DrawImage API の compositeMode パラメーターでオーバーライドされない限り、コンテキストに描画されるすべてのプリミティブに適用されます。
プリミティブブレンドは、コンテキストに描画される任意のプリミティブの内部に適用されます。DrawImage の場合、これはイメージの矩形、オフセット、ワールド変換によって暗黙的に決まります。
プリミティブブレンドが D2D1_PRIMITIVE_BLEND_SOURCE_OVER 以外である場合、ClearType レンダリングは無効になります。これらのモードでアプリケーションが明示的に ClearType レンダリングを強制すると、描画コンテキストはエラー状態になります。EndDraw または Flush のいずれかから D2DERR_WRONG_STATE が返されます。
デバイスコンテキストが使用する、現在設定されているプリミティブブレンドを返します。
戻り値
Type: D2D1_PRIMITIVE_BLEND
現在のプリミティブブレンド。既定値は D2D1_PRIMITIVE_BLEND_SOURCE_OVER です。
デバイスコンテキストに渡される値の解釈に使用する単位を設定します。
| unitMode | D2D1_UNIT_MODE | in | 渡された単位をデバイスコンテキストがどのように解釈するかを定義する列挙体。 |
解説(Remarks)
このメソッドは、SetDpi および GetDpi の影響を受けるすべてのプロパティおよびパラメーターに影響します。これは、別の単位であると明示的に定義されていないすべての座標、長さ、 およびその他のプロパティに影響します。たとえば、次のとおりです。
- SetUnitMode は、ID2D1DeviceContext::DrawLine に渡される座標や、ID2D1DeviceContext::FillGeometry に渡されるジオメトリのスケーリングに影響します。
- SetUnitMode は、ID2D1Bitmap::GetPixelSize が返す値には影響しません。
デバイスコンテキストが値の解釈に使用しているモードを取得します。
戻り値
Type: D2D1_UNIT_MODE
単位モード。
一連のグリフをデバイスコンテキストに描画します。
| baselineOrigin | D2D_POINT_2F | in | 一連のグリフのうち最初のグリフの原点。 |
| glyphRun | DWRITE_GLYPH_RUN* | in | レンダリングするグリフ。 |
| glyphRunDescription | DWRITE_GLYPH_RUN_DESCRIPTION* | inoptional | 補足的なグリフシリーズ情報。 |
| foregroundBrush | ID2D1Brush* | in | テキストの色を定義するブラシ。 |
| measuringMode | DWRITE_MEASURING_MODE | in | グリフシリーズの測定モード。アドバンスとオフセットの決定に使用されます。既定値は DWRITE_MEASURING_MODE_NATURAL です。 |
解説(Remarks)
glyphRunDescription はレンダリング時には無視されますが、XPS や SVG ファイルへの出力など、印刷やレンダリングコマンドのシリアル化に役立つ場合があります。これは、グリフランの記述を持たなかった ID2D1RenderTarget::DrawGlyphRun を拡張したものです。
| image | ID2D1Image* | in | 描画する画像(エフェクト出力等)へのポインタ。 |
| targetOffset | D2D_POINT_2F* | inoptional | 描画先での配置オフセット座標。NULL可で原点配置。 |
| imageRectangle | D2D_RECT_F* | inoptional | 画像から取り出す元矩形。NULL可で全体を用いる。 |
| interpolationMode | D2D1_INTERPOLATION_MODE | in | 拡縮時の補間方式を指定する列挙値。 |
| compositeMode | D2D1_COMPOSITE_MODE | in | 画像の合成モードを指定する列挙値。 |
| gdiMetafile | ID2D1GdiMetafile* | in | 描画するGDIメタファイルへのポインタ。 |
| targetOffset | D2D_POINT_2F* | inoptional | 描画先での配置オフセット座標。NULL可で原点配置。 |
| bitmap | ID2D1Bitmap* | in | 描画するビットマップへのポインタ。 |
| destinationRectangle | D2D_RECT_F* | inoptional | 描画先の矩形。NULL可でビットマップ実寸を原点に配置する。 |
| opacity | FLOAT | in | 描画時の不透明度。0.0~1.0の浮動小数。 |
| interpolationMode | D2D1_INTERPOLATION_MODE | in | 拡縮時の高品質補間方式を指定する列挙値。 |
| sourceRectangle | D2D_RECT_F* | inoptional | ビットマップから取り出す元矩形。NULL可で全体を用いる。 |
| perspectiveTransform | D2D_MATRIX_4X4_F* | inoptional | 適用する4x4透視変換行列。NULL可で省略する。 |
| layerParameters | D2D1_LAYER_PARAMETERS1* | in | 境界・マスク・不透明度などレイヤー構成を指定する拡張属性へのポインタ。 |
| layer | ID2D1Layer* | inoptional | 描画内容を蓄積するレイヤーリソース。NULL可で自動管理させる。 |
エフェクトの入力の一部が無効であることを示します。このメソッドは複数回呼び出すことができます。
| effect | ID2D1Effect* | in | 無効化するエフェクト。 |
| input | DWORD | in | 入力インデックス。 |
| inputRectangle | D2D_RECT_F* | in | 無効化する矩形。 |
戻り値
Type: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| E_INVALIDARG | 無効なパラメーターが呼び出し先の関数に渡されました。 |
エフェクトに蓄積された無効な出力矩形の数を取得します。
| effect | ID2D1Effect* | in | 無効な矩形をカウントする対象のエフェクト。 |
| rectangleCount | DWORD* | out | 返される矩形の数。 |
戻り値
Type: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| E_INVALIDARG | 無効なパラメーターが呼び出し先の関数に渡されました。 |
エフェクトが最後に描画され、その後デバイスコンテキストで EndDraw が呼び出されて以降に蓄積された、無効な矩形を取得します。
| effect | ID2D1Effect* | in | 無効な矩形を取得する対象のエフェクト。 |
| rectangles | D2D_RECT_F* | out | D2D1_RECT_F 構造体の配列。これは正しいサイズで割り当てる必要があります。無効な矩形の数は GetEffectInvalidRectangleCount メソッドを使用して取得できます。 |
| rectanglesCount | DWORD | in | 取得する矩形の数。 |
戻り値
Type: HRESULT
このメソッドは HRESULT を返します。取り得る値には、以下の表に示すものが含まれますが、これらに限定されません。
| HRESULT | 説明 |
|---|---|
| S_OK | エラーは発生しませんでした。 |
| E_OUTOFMEMORY | Direct2D は呼び出しを完了するのに十分なメモリを割り当てられませんでした。 |
| E_INVALIDARG | 無効なパラメーターが呼び出し先の関数に渡されました。 |
解説(Remarks)
InvalidateEffectInputRectangle メソッドを使用すると、Direct2D がエフェクトグラフを通じて伝播させる無効化矩形を指定できます。
複数の無効な矩形が要求された場合、このメソッドが返す矩形は重なり合うことがあります。その場合、矩形の数は GetEffectInvalidRectangleCount が返す数より少なくなることがあります。
指定された出力矩形を生成するために、呼び出し元が供給する必要のある入力矩形を返します。
| renderEffect | ID2D1Effect* | in | 出力がレンダリングされる対象のイメージ。 |
| renderImageRectangle | D2D_RECT_F* | inoptional | 入力が検査される対象となる、出力イメージの部分。 |
| inputDescriptions | D2D1_EFFECT_INPUT_DESCRIPTION* | in | 矩形が照会される対象の入力の一覧。 |
| requiredInputRects | D2D_RECT_F* | out | 呼び出し元に返される入力矩形。 |
| inputCount | DWORD | in | 入力の数。 |
戻り値
Type: HRESULT
失敗コード。通常、これはチェーン内のエフェクトが何らかのエラーを返した場合にのみ発生します。
解説(Remarks)
呼び出し元は、返された必須入力矩形に依存しないよう十分に注意する必要があります。 エフェクトの動作に対する正確性のための小さな変更によって、返される矩形が異なる場合があります。 さらに、レンダー内部で適用されるさまざまな種類の最適化も、結果に影響を与える可能性があります。
| opacityMask | ID2D1Bitmap* | in | アルファ値をマスクとして用いるビットマップへのポインタ。 |
| brush | ID2D1Brush* | in | マスクを通して塗る色を提供するブラシへのポインタ。 |
| destinationRectangle | D2D_RECT_F* | inoptional | 描画先の矩形。NULL可で原点配置となる。 |
| sourceRectangle | D2D_RECT_F* | inoptional | マスクから取り出す元矩形。NULL可で全体を用いる。 |
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 指定が可能。#define global IID_ID2D1DeviceContext "{E8F7FE7A-191C-466D-AD95-975678BDA998}" #usecom global ID2D1DeviceContext IID_ID2D1DeviceContext "{}" #comfunc global ID2D1DeviceContext_CreateBitmap 57 int,sptr,int,sptr,sptr #comfunc global ID2D1DeviceContext_CreateBitmapFromWicBitmap 58 sptr,sptr,sptr #comfunc global ID2D1DeviceContext_CreateColorContext 59 int,sptr,int,sptr #comfunc global ID2D1DeviceContext_CreateColorContextFromFilename 60 wstr,sptr #comfunc global ID2D1DeviceContext_CreateColorContextFromWicColorContext 61 sptr,sptr #comfunc global ID2D1DeviceContext_CreateBitmapFromDxgiSurface 62 sptr,sptr,sptr #comfunc global ID2D1DeviceContext_CreateEffect 63 sptr,sptr #comfunc global ID2D1DeviceContext_CreateGradientStopCollection 64 sptr,int,int,int,int,int,int,sptr #comfunc global ID2D1DeviceContext_CreateImageBrush 65 sptr,sptr,sptr,sptr #comfunc global ID2D1DeviceContext_CreateBitmapBrush 66 sptr,sptr,sptr,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,sptr #comfunc global ID2D1DeviceContext_GetImageWorldBounds 71 sptr,sptr #comfunc global ID2D1DeviceContext_GetGlyphRunWorldBounds 72 int,sptr,int,sptr #comfunc global ID2D1DeviceContext_GetDevice 73 sptr #comfunc global ID2D1DeviceContext_SetTarget 74 sptr #comfunc global ID2D1DeviceContext_GetTarget 75 sptr #comfunc global ID2D1DeviceContext_SetRenderingControls 76 sptr #comfunc global ID2D1DeviceContext_GetRenderingControls 77 sptr #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,sptr,sptr,sptr,int #comfunc global ID2D1DeviceContext_DrawImage 83 sptr,sptr,sptr,int,int #comfunc global ID2D1DeviceContext_DrawGdiMetafile 84 sptr,sptr #comfunc global ID2D1DeviceContext_DrawBitmap 85 sptr,sptr,float,int,sptr,sptr #comfunc global ID2D1DeviceContext_PushLayer 86 sptr,sptr #comfunc global ID2D1DeviceContext_InvalidateEffectInputRectangle 87 sptr,int,sptr #comfunc global ID2D1DeviceContext_GetEffectInvalidRectangleCount 88 sptr,sptr #comfunc global ID2D1DeviceContext_GetEffectInvalidRectangles 89 sptr,sptr,int #comfunc global ID2D1DeviceContext_GetEffectRequiredInputRectangles 90 sptr,sptr,sptr,sptr,int #comfunc global ID2D1DeviceContext_FillOpacityMask 91 sptr,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。