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

ID2D1DeviceContext2

COM
IID394ea6a3-0c34-4321-950b-6ca20f0be6c7継承元ID2D1DeviceContext1自前メソッド開始 vtbl95

公式ドキュメント

このインターフェイスは ID2D1DeviceContext1 インターフェイスと同じすべての機能を提供し、さらにインクの描画、グラデーションメッシュの描画、画像読み込みの改善などの機能を有効にします。

メソッド 11

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

vtbl 95 HRESULT CreateInk(D2D1_INK_POINT* startPoint, ID2D1Ink** ink)
startPointD2D1_INK_POINT*inインクの開始点(位置と半径)を表すD2D1_INK_POINTへのポインター。
inkID2D1Ink**out生成されたインクオブジェクトを受け取る出力ポインター。
vtbl 96 HRESULT CreateInkStyle(D2D1_INK_STYLE_PROPERTIES* inkStyleProperties, ID2D1InkStyle** inkStyle)
inkStylePropertiesD2D1_INK_STYLE_PROPERTIES*inoptionalニブ形状や変換を記述したインクスタイルプロパティへのポインター。NULL可。
inkStyleID2D1InkStyle**out生成されたインクスタイルを受け取る出力ポインター。
vtbl 97 HRESULT CreateGradientMesh(D2D1_GRADIENT_MESH_PATCH* patches, DWORD patchesCount, ID2D1GradientMesh** gradientMesh)

指定されたパッチの配列を使用して、新しい ID2D1GradientMesh インスタンスを作成します。

patchesD2D1_GRADIENT_MESH_PATCH*inこのメッシュで使用するパッチを格納した配列へのポインター。
patchesCountDWORDinpatches 引数から読み取るパッチの数。
gradientMeshID2D1GradientMesh**outこのメソッドが返るとき、新しいグラデーションメッシュへのポインターのアドレスを格納します。

戻り値

Type: HRESULT

成功した場合は S_OK、それ以外の場合は失敗を示す HRESULT。

vtbl 98 HRESULT CreateImageSourceFromWic(IWICBitmapSource* wicBitmapSource, D2D1_IMAGE_SOURCE_LOADING_OPTIONS loadingOptions, D2D1_ALPHA_MODE alphaMode, ID2D1ImageSourceFromWic** imageSource)
wicBitmapSourceIWICBitmapSource*in画像ソースの元となるWICビットマップソースのポインター。
loadingOptionsD2D1_IMAGE_SOURCE_LOADING_OPTIONSin読み込み挙動(遅延読み込み等)を制御するオプションフラグ。
alphaModeD2D1_ALPHA_MODEinアルファ値の解釈(事前乗算/直線等)を指定する列挙値。
imageSourceID2D1ImageSourceFromWic**out生成された画像ソースを受け取る出力ポインター。
vtbl 99 HRESULT CreateLookupTable3D(D2D1_BUFFER_PRECISION precision, DWORD* extents, BYTE* data, DWORD dataCount, DWORD* strides, ID2D1LookupTable3D** lookupTable)

3 チャネルの入力を 3 チャネルの出力にマッピングするための 3D ルックアップテーブルを作成します。テーブルデータは 4 チャネル形式で指定する必要があります。(ID2D1DeviceContext2.CreateLookupTable3D)

precisionD2D1_BUFFER_PRECISIONin入力ルックアップテーブルデータの精度。
extentsDWORD*in各次元 (X, Y, Z) あたりのルックアップテーブル要素の数。
dataBYTE*inルックアップテーブルデータを保持するバッファー。
dataCountDWORDinルックアップテーブルデータバッファーのサイズ。
stridesDWORD*in2 つの値を格納した配列。1 つ目の値は、LUT データのある行 (X 次元) から次の行までのバイト単位のサイズです。
2 つ目の値は、ある LUT データプレーン (X および Y 次元) から次のプレーンまでのバイト単位のサイズです。
lookupTableID2D1LookupTable3D**out新しいルックアップテーブルインスタンスを受け取ります。

戻り値

Type: HRESULT

成功した場合は S_OK、それ以外の場合は失敗を示す HRESULT。

vtbl 100 HRESULT CreateImageSourceFromDxgi(IDXGISurface** surfaces, DWORD surfaceCount, DXGI_COLOR_SPACE_TYPE colorSpace, D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options, ID2D1ImageSource** imageSource)

1 つ以上の DXGI サーフェスのセットから画像ソースを作成します。YCbCr サーフェスは、以降の描画時に自動的に RGBA へ変換されます。

surfacesIDXGISurface**in画像ソースの作成元となる DXGI サーフェス。
surfaceCountDWORDin指定するサーフェスの数。1 から 3 の範囲でなければなりません。
colorSpaceDXGI_COLOR_SPACE_TYPEin入力の色空間。
optionsD2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONSin色空間の変換を制御するオプション。
imageSourceID2D1ImageSource**out新しい画像ソースインスタンスを受け取ります。

戻り値

Type: HRESULT

成功した場合は S_OK、それ以外の場合は失敗を示す HRESULT。

解説(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

DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020

DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020

1,2,3 サーフェス数が 1 の場合: サーフェス数が 2 の場合: サーフェス数が 3 の場合:

また、あるピクセル形式が D2D でサポートされるためには、GPU がその形式を十分にサポートしている必要があります。D2D が形式をサポートしているかどうかを判断するには、IsDxgiFormatSupported を呼び出します。

この API は、指定された色空間タイプとオプションを使用して、YCbCr 形式を sRGB へ変換します。RGBA データは目的の色空間にあると見なされ、D2D は変換を適用しません。

複数のサーフェスが指定された場合、このメソッドは、対応する各ソース矩形の相対的なサイズ (ソース矩形パラメーターが NULL の場合は各サーフェスの境界) から、クロマプレーンが (2 倍で) サブサンプリングされているかどうかを推測します。2 つ目および 3 つ目の矩形は、それぞれ 1 つ目の矩形とサイズが等しいか、または 1 つ目の矩形の一方もしくは両方の次元を 0.5 倍 (切り上げ) にしたサイズでなければなりません。

指定する場合、ソース矩形は対応するサーフェスの境界内になければなりません。ソース矩形は異なる原点を持つことができます。 この場合、このメソッドは各プレーンのデータを互いに整列するようにシフトします。

vtbl 101 HRESULT GetGradientMeshWorldBounds(ID2D1GradientMesh* gradientMesh, D2D_RECT_F* pBounds)

指定されたグラデーションメッシュのワールド境界を返します。

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

戻り値

Type: HRESULT

成功した場合は S_OK、それ以外の場合は失敗を示す HRESULT。

解説(Remarks)

ワールド境界は、コンテキストの現在の DPI、単位モード、およびワールド変換を反映します。これは、指定されたグラデーションメッシュで DrawGradientMesh を呼び出したときに、どのピクセルが影響を受けるかを示します。 これには、デバイスコンテキストに設定されている現在のクリップ矩形や、コンテキストの現在のターゲットの範囲は反映されません。

vtbl 102 void DrawInk(ID2D1Ink* ink, ID2D1Brush* brush, ID2D1InkStyle* inkStyle)

指定されたブラシとインクスタイルを使用して、指定されたインクオブジェクトを描画します。(ID2D1DeviceContext2.DrawInk)

inkID2D1Ink*in描画するインクオブジェクト。
brushID2D1Brush*inインクオブジェクトの描画に使用するブラシ。
inkStyleID2D1InkStyle*inoptionalインクオブジェクトの描画時に使用するインクスタイル。
vtbl 103 void DrawGradientMesh(ID2D1GradientMesh* gradientMesh)

指定されたグラデーションメッシュをターゲットに描画します。(ID2D1DeviceContext2.DrawGradientMesh)

gradientMeshID2D1GradientMesh*in描画するグラデーションメッシュ。
vtbl 104 void DrawGdiMetafile(ID2D1GdiMetafile* gdiMetafile, D2D_RECT_F* destinationRectangle, D2D_RECT_F* sourceRectangle)
gdiMetafileID2D1GdiMetafile*in描画するGDIメタファイルのポインター。
destinationRectangleD2D_RECT_F*inoptional描画先の矩形を表すD2D_RECT_Fへのポインター。NULL可。
sourceRectangleD2D_RECT_F*inoptionalメタファイルから切り出す元矩形を表すD2D_RECT_Fへのポインター。NULL可。
vtbl 105 HRESULT CreateTransformedImageSource(ID2D1ImageSource* imageSource, D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES* properties, ID2D1TransformedImageSource** transformedImageSource)

元の画像とリソースを共有する画像ソースを作成します。

imageSourceID2D1ImageSource*in元の画像。
propertiesD2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES*inソース画像のプロパティ。
transformedImageSourceID2D1TransformedImageSource**out新しい画像ソースを受け取ります。

戻り値

Type: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 指定が可能。