ID2D1GradientStopCollection
COM公式ドキュメント
線形および放射状のグラデーションブラシで使用する D2D1_GRADIENT_STOP オブジェクトのコレクションを表します。
解説(Remarks)
ID2D1GradientStopCollection オブジェクトの作成
ID2D1GradientStopCollection を作成するには、ID2D1RenderTarget::CreateGradientStopCollection メソッドを使用します。グラデーションストップコレクションはデバイス依存のリソースです。アプリケーションは、グラデーションストップコレクションを使用するレンダーターゲットを初期化した後にグラデーションストップコレクションを作成し、レンダーターゲットの再作成が必要になったときには、そのたびにグラデーションストップコレクションも再作成する必要があります。(リソースの詳細については、リソースの概要を参照してください。)
例
次の例では、グラデーションストップの配列を作成し、それを使用して ID2D1GradientStopCollection を作成します。
// グラデーションブラシで使用するグラデーションストップコレクションに
// 格納するグラデーションストップの配列を作成します。
ID2D1GradientStopCollection *pGradientStops = NULL;
D2D1_GRADIENT_STOP gradientStops[2];
gradientStops[0].color = D2D1::ColorF(D2D1::ColorF::Yellow, 1);
gradientStops[0].position = 0.0f;
gradientStops[1].color = D2D1::ColorF(D2D1::ColorF::ForestGreen, 1);
gradientStops[1].position = 1.0f;
// 事前に宣言された D2D1_GRADIENT_STOP 構造体の配列から
// ID2D1GradientStopCollection を作成します。
hr = m_pRenderTarget->CreateGradientStopCollection(
gradientStops,
2,
D2D1_GAMMA_2_2,
D2D1_EXTEND_MODE_CLAMP,
&pGradientStops
);
次のコード例では、ID2D1GradientStopCollection を使用して ID2D1LinearGradientBrush を作成します。
// グラデーションの方向を決定する線は、正方形の左上隅から始まり
// 右下隅で終わります。
if (SUCCEEDED(hr))
{
hr = m_pRenderTarget->CreateLinearGradientBrush(
D2D1::LinearGradientBrushProperties(
D2D1::Point2F(0, 0),
D2D1::Point2F(150, 150)),
pGradientStops,
&m_pLinearGradientBrush
);
}
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
コレクション内のグラデーションストップの数を取得します。
戻り値
型: UINT32
コレクション内のグラデーションストップの数。
コレクションからグラデーションストップを D2D1_GRADIENT_STOP 構造体の配列にコピーします。
| gradientStops | D2D1_GRADIENT_STOP* | out | D2D1_GRADIENT_STOP 構造体の 1 次元配列へのポインター。このメソッドが返るとき、配列にはコレクションのグラデーションストップのコピーが格納されます。この配列のメモリはアプリケーション側で確保する必要があります。 |
| gradientStopsCount | DWORD | in | コピーするグラデーションストップの数を示す値。この値がコレクション内のグラデーションストップの数より小さい場合、残りのグラデーションストップは省略されます。この値がコレクション内のグラデーションストップの数より大きい場合、余分なグラデーションストップは NULL に設定されます。コレクション内のグラデーションストップの数を取得するには、GetGradientStopCount メソッドを使用します。 |
解説(Remarks)
グラデーションストップは位置の順にコピーされます。最も小さい位置の値を持つグラデーションストップから始まり、最も大きい位置の値を持つグラデーションストップへと進みます。
グラデーションストップが補間されるガンマ空間を示します。
戻り値
型: D2D1_GAMMA
グラデーションストップが補間されるガンマ空間。
正規化されたグラデーション範囲の外側でのグラデーションの動作を示します。
戻り値
[0,1] に正規化されたグラデーション範囲の外側でのグラデーションの動作。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID2D1GradientStopCollection "{2CD906A7-12E2-11DC-9FED-001143A055F9}" #usecom global ID2D1GradientStopCollection IID_ID2D1GradientStopCollection "{}" #comfunc global ID2D1GradientStopCollection_GetGradientStopCount 4 #comfunc global ID2D1GradientStopCollection_GetGradientStops 5 var,int #comfunc global ID2D1GradientStopCollection_GetColorInterpolationGamma 6 #comfunc global ID2D1GradientStopCollection_GetExtendMode 7 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_ID2D1GradientStopCollection "{2CD906A7-12E2-11DC-9FED-001143A055F9}" #usecom global ID2D1GradientStopCollection IID_ID2D1GradientStopCollection "{}" #comfunc global ID2D1GradientStopCollection_GetGradientStopCount 4 #comfunc global ID2D1GradientStopCollection_GetGradientStops 5 sptr,int #comfunc global ID2D1GradientStopCollection_GetColorInterpolationGamma 6 #comfunc global ID2D1GradientStopCollection_GetExtendMode 7 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。