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

ID2D1CommandSink1

COM
IID9eb767fd-4269-4467-b8c2-eb30cb305743継承元ID2D1CommandSink自前メソッド開始 vtbl28

公式ドキュメント

このインターフェースは、既存の ID2D1CommandSink インターフェースとまったく同じ機能をすべて実行します。さらに、SetPrimitiveBlend1 メソッドを通じて、新しいプリミティブブレンドモードである MIN と ADD へのアクセスも可能にします。

メソッド 1

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

vtbl 28 HRESULT SetPrimitiveBlend1(D2D1_PRIMITIVE_BLEND primitiveBlend)

新しいプリミティブブレンドモードを設定します。(ID2D1CommandSink1.SetPrimitiveBlend1)

primitiveBlendD2D1_PRIMITIVE_BLENDin以降のプリミティブに適用されるプリミティブブレンドです。

戻り値

型: HRESULT

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

解説(Remarks)

ブレンドモード

エイリアスレンダリング(MIN モードを除く)では、出力値 O は、プリミティブがデスティネーションピクセルを覆う割合に基づいて、値 blend(S, D) をデスティネーションピクセル値と線形補間することによって計算されます。

ここに示す表は、エイリアスブレンディングとアンチエイリアスブレンディングの両方についてのプリミティブブレンドモードを示しています。表に記載されている式では、次の要素が使用されています。

プリミティブブレンドモード エイリアスブレンディング アンチエイリアスブレンディング 説明
D2D1_PRIMITIVE_BLEND_SOURCE_OVER O = (S + (1 – SA) * D) * C + D * (1 – C) O = S * C + D *(1 – SA *C) 標準的なソースオーバーデスティネーションのブレンドモードです。
D2D1_PRIMITIVE_BLEND_COPY O = S * C + D * (1 – C) O = S * C + D * (1 – C) ソースがデスティネーションにコピーされます。デスティネーションのピクセルは無視されます。
D2D1_PRIMITIVE_BLEND_MIN O = Min(S + 1-SA, D) O = Min(S * C + 1 – SA *C, D) 結果のピクセル値には、ソースとデスティネーションのピクセル値の最小値が使用されます。Windows 8 以降で利用可能です。
D2D1_PRIMITIVE_BLEND_ADD O = (S + D) * C + D * (1 – C) O = S * C + D 結果のピクセル値は、ソースとデスティネーションのピクセル値の合計になります。Windows 8 以降で利用可能です。
不透明度と背景を変化させた Direct2D のプリミティブブレンドモードの図。 不透明度と背景を変化させたプリミティブブレンドモードの図です。

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

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

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

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ID2D1CommandSink1 "{9EB767FD-4269-4467-B8C2-EB30CB305743}"
#usecom global ID2D1CommandSink1 IID_ID2D1CommandSink1 "{}"
#comfunc global ID2D1CommandSink1_SetPrimitiveBlend1  28 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。