ID2D1DeviceContext2
COM公式ドキュメント
このインターフェイスは ID2D1DeviceContext1 インターフェイスと同じすべての機能を提供し、さらにインクの描画、グラデーションメッシュの描画、画像読み込みの改善などの機能を有効にします。
メソッド 11
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
| startPoint | D2D1_INK_POINT* | in | インクの開始点(位置と半径)を表すD2D1_INK_POINTへのポインター。 |
| ink | ID2D1Ink** | out | 生成されたインクオブジェクトを受け取る出力ポインター。 |
| inkStyleProperties | D2D1_INK_STYLE_PROPERTIES* | inoptional | ニブ形状や変換を記述したインクスタイルプロパティへのポインター。NULL可。 |
| inkStyle | ID2D1InkStyle** | out | 生成されたインクスタイルを受け取る出力ポインター。 |
指定されたパッチの配列を使用して、新しい ID2D1GradientMesh インスタンスを作成します。
| patches | D2D1_GRADIENT_MESH_PATCH* | in | このメッシュで使用するパッチを格納した配列へのポインター。 |
| patchesCount | DWORD | in | patches 引数から読み取るパッチの数。 |
| gradientMesh | ID2D1GradientMesh** | out | このメソッドが返るとき、新しいグラデーションメッシュへのポインターのアドレスを格納します。 |
戻り値
| wicBitmapSource | IWICBitmapSource* | in | 画像ソースの元となるWICビットマップソースのポインター。 |
| loadingOptions | D2D1_IMAGE_SOURCE_LOADING_OPTIONS | in | 読み込み挙動(遅延読み込み等)を制御するオプションフラグ。 |
| alphaMode | D2D1_ALPHA_MODE | in | アルファ値の解釈(事前乗算/直線等)を指定する列挙値。 |
| imageSource | ID2D1ImageSourceFromWic** | out | 生成された画像ソースを受け取る出力ポインター。 |
3 チャネルの入力を 3 チャネルの出力にマッピングするための 3D ルックアップテーブルを作成します。テーブルデータは 4 チャネル形式で指定する必要があります。(ID2D1DeviceContext2.CreateLookupTable3D)
| precision | D2D1_BUFFER_PRECISION | in | 入力ルックアップテーブルデータの精度。 |
| extents | DWORD* | in | 各次元 (X, Y, Z) あたりのルックアップテーブル要素の数。 |
| data | BYTE* | in | ルックアップテーブルデータを保持するバッファー。 |
| dataCount | DWORD | in | ルックアップテーブルデータバッファーのサイズ。 |
| strides | DWORD* | in | 2 つの値を格納した配列。1 つ目の値は、LUT データのある行 (X 次元) から次の行までのバイト単位のサイズです。 2 つ目の値は、ある LUT データプレーン (X および Y 次元) から次のプレーンまでのバイト単位のサイズです。 |
| lookupTable | ID2D1LookupTable3D** | out | 新しいルックアップテーブルインスタンスを受け取ります。 |
戻り値
1 つ以上の DXGI サーフェスのセットから画像ソースを作成します。YCbCr サーフェスは、以降の描画時に自動的に RGBA へ変換されます。
| surfaces | IDXGISurface** | in | 画像ソースの作成元となる DXGI サーフェス。 |
| surfaceCount | DWORD | in | 指定するサーフェスの数。1 から 3 の範囲でなければなりません。 |
| colorSpace | DXGI_COLOR_SPACE_TYPE | in | 入力の色空間。 |
| options | D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS | in | 色空間の変換を制御するオプション。 |
| imageSource | ID2D1ImageSource** | out | 新しい画像ソースインスタンスを受け取ります。 |
戻り値
解説(Remarks)
このメソッドは、画像の描画に使用できる画像ソースを作成します。
このメソッドは、限られたセットの DXGI 形式および DXGI 色空間タイプを使用するサーフェスをサポートします。サポートされるのは、色空間タイプ、サーフェス形式、サーフェス数の組み合わせのうち、以下のもののみです。
| 色空間タイプ | サーフェス数 | サーフェス形式 |
|---|---|---|
| DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 | 1 | D2D が標準でサポートするピクセル形式:
|
| DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601 | 1, 2, 3 | サーフェス数が 1 の場合: サーフェス数が 2 の場合: サーフェス数が 3 の場合: |
| DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601
DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P601
DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709 DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P709 |
1,2,3 | サーフェス数が 1 の場合: サーフェス数が 2 の場合: サーフェス数が 3 の場合: |
また、あるピクセル形式が D2D でサポートされるためには、GPU がその形式を十分にサポートしている必要があります。D2D が形式をサポートしているかどうかを判断するには、IsDxgiFormatSupported を呼び出します。
この API は、指定された色空間タイプとオプションを使用して、YCbCr 形式を sRGB へ変換します。RGBA データは目的の色空間にあると見なされ、D2D は変換を適用しません。
複数のサーフェスが指定された場合、このメソッドは、対応する各ソース矩形の相対的なサイズ (ソース矩形パラメーターが NULL の場合は各サーフェスの境界) から、クロマプレーンが (2 倍で) サブサンプリングされているかどうかを推測します。2 つ目および 3 つ目の矩形は、それぞれ 1 つ目の矩形とサイズが等しいか、または 1 つ目の矩形の一方もしくは両方の次元を 0.5 倍 (切り上げ) にしたサイズでなければなりません。
指定する場合、ソース矩形は対応するサーフェスの境界内になければなりません。ソース矩形は異なる原点を持つことができます。 この場合、このメソッドは各プレーンのデータを互いに整列するようにシフトします。
指定されたグラデーションメッシュのワールド境界を返します。
| gradientMesh | ID2D1GradientMesh* | in | ワールド境界を計算する対象のグラデーションメッシュ。 |
| pBounds | D2D_RECT_F* | out | このメソッドが返るとき、グラデーションメッシュの境界へのポインターをデバイス非依存ピクセル (DIP) 単位で格納します。 |
戻り値
解説(Remarks)
ワールド境界は、コンテキストの現在の DPI、単位モード、およびワールド変換を反映します。これは、指定されたグラデーションメッシュで DrawGradientMesh を呼び出したときに、どのピクセルが影響を受けるかを示します。 これには、デバイスコンテキストに設定されている現在のクリップ矩形や、コンテキストの現在のターゲットの範囲は反映されません。
指定されたブラシとインクスタイルを使用して、指定されたインクオブジェクトを描画します。(ID2D1DeviceContext2.DrawInk)
| ink | ID2D1Ink* | in | 描画するインクオブジェクト。 |
| brush | ID2D1Brush* | in | インクオブジェクトの描画に使用するブラシ。 |
| inkStyle | ID2D1InkStyle* | inoptional | インクオブジェクトの描画時に使用するインクスタイル。 |
指定されたグラデーションメッシュをターゲットに描画します。(ID2D1DeviceContext2.DrawGradientMesh)
| gradientMesh | ID2D1GradientMesh* | in | 描画するグラデーションメッシュ。 |
| gdiMetafile | ID2D1GdiMetafile* | in | 描画するGDIメタファイルのポインター。 |
| destinationRectangle | D2D_RECT_F* | inoptional | 描画先の矩形を表すD2D_RECT_Fへのポインター。NULL可。 |
| sourceRectangle | D2D_RECT_F* | inoptional | メタファイルから切り出す元矩形を表すD2D_RECT_Fへのポインター。NULL可。 |
元の画像とリソースを共有する画像ソースを作成します。
| imageSource | ID2D1ImageSource* | in | 元の画像。 |
| properties | D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES* | in | ソース画像のプロパティ。 |
| transformedImageSource | ID2D1TransformedImageSource** | out | 新しい画像ソースを受け取ります。 |
戻り値
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID2D1DeviceContext2 "{394EA6A3-0C34-4321-950B-6CA20F0BE6C7}" #usecom global ID2D1DeviceContext2 IID_ID2D1DeviceContext2 "{}" #comfunc global ID2D1DeviceContext2_CreateInk 95 var,sptr #comfunc global ID2D1DeviceContext2_CreateInkStyle 96 var,sptr #comfunc global ID2D1DeviceContext2_CreateGradientMesh 97 var,int,sptr #comfunc global ID2D1DeviceContext2_CreateImageSourceFromWic 98 sptr,int,int,sptr #comfunc global ID2D1DeviceContext2_CreateLookupTable3D 99 int,var,var,int,var,sptr #comfunc global ID2D1DeviceContext2_CreateImageSourceFromDxgi 100 sptr,int,int,int,sptr #comfunc global ID2D1DeviceContext2_GetGradientMeshWorldBounds 101 sptr,var #comfunc global ID2D1DeviceContext2_DrawInk 102 sptr,sptr,sptr #comfunc global ID2D1DeviceContext2_DrawGradientMesh 103 sptr #comfunc global ID2D1DeviceContext2_DrawGdiMetafile 104 sptr,var,var #comfunc global ID2D1DeviceContext2_CreateTransformedImageSource 105 sptr,var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ID2D1DeviceContext2 "{394EA6A3-0C34-4321-950B-6CA20F0BE6C7}" #usecom global ID2D1DeviceContext2 IID_ID2D1DeviceContext2 "{}" #comfunc global ID2D1DeviceContext2_CreateInk 95 sptr,sptr #comfunc global ID2D1DeviceContext2_CreateInkStyle 96 sptr,sptr #comfunc global ID2D1DeviceContext2_CreateGradientMesh 97 sptr,int,sptr #comfunc global ID2D1DeviceContext2_CreateImageSourceFromWic 98 sptr,int,int,sptr #comfunc global ID2D1DeviceContext2_CreateLookupTable3D 99 int,sptr,sptr,int,sptr,sptr #comfunc global ID2D1DeviceContext2_CreateImageSourceFromDxgi 100 sptr,int,int,int,sptr #comfunc global ID2D1DeviceContext2_GetGradientMeshWorldBounds 101 sptr,sptr #comfunc global ID2D1DeviceContext2_DrawInk 102 sptr,sptr,sptr #comfunc global ID2D1DeviceContext2_DrawGradientMesh 103 sptr #comfunc global ID2D1DeviceContext2_DrawGdiMetafile 104 sptr,sptr,sptr #comfunc global ID2D1DeviceContext2_CreateTransformedImageSource 105 sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。