LinearGradientBrush::GetBlend メソッド (gdiplusbrush.h)

LinearGradientBrush::GetBlend メソッドは、LinearGradientBrush オブジェクトからブレンド 係数とそれに対応するブレンド位置を取得します。

構文

Status GetBlend(
  [out] REAL *blendFactors,
  [out] REAL *blendPositions,
  [in]  INT  count
);

パラメーター

[out] blendFactors

種類: REAL*

ブレンド係数を受け取る配列へのポインター。 配列内の各数値は、終了色のパーセンテージを示し、0.0 から 1.0 の範囲です。

[out] blendPositions

種類: REAL*

ブレンド位置を受け取る配列へのポインター。 配列内の各数値は、開始境界と終了境界の間の距離のパーセンテージを示し、0.0 から 1.0 の範囲です。0.0 はグラデーションの開始境界を示し、1.0 は終了境界を示します。 0.0 ~ 1.0 のブレンド位置は、境界線と平行な線を示します。これは、開始境界から終了境界までの距離の一定の割合です。 たとえば、ブレンド位置が 0.7 の場合、開始境界から終了境界までの距離の 70% の線が示されます。 境界線に平行な線の色は一定です。

[in] count

型: INT

取得するブレンド 係数の数を指定する整数。 LinearGradientBrush オブジェクトの LinearGradientBrush::GetBlend メソッドを呼び出す前に、同じ LinearGradientBrush オブジェクトの LinearGradientBrush::GetBlendCount メソッドを呼び出して、ブレンド 係数の現在の数を確認します。 取得されるブレンド位置の数は、取得されたブレンド 係数の数と同じです。

戻り値

種類: 状態

メソッドが成功した場合は、 Status 列挙体の要素である Ok を返します。

メソッドが失敗した場合は、 Status 列挙体の他の要素のいずれかを返します。

解説

LinearGradientBrush オブジェクトには、開始境界と終了境界の 2 つの並列境界があります。 色は、これら 2 つの境界のそれぞれに関連付けられます。 各境界は、指定した点を通過する直線です。開始境界は開始点を通過します。終了境界は終了点を通過し、線形グラデーション ブラシの方向に垂直です。 線形グラデーション ブラシの方向は、始点と終点で定義される線に従います。 この線 ("方向線" は、水平、垂直、または対角線である場合があります。 境界に平行な線上にあるすべての点は同じ色になります。 線状のグラデーション ブラシで領域を塗りつぶすと、開始境界から終了境界に向けて方向線に沿って移動すると、色が徐々に 1 つの線から次の線に変わります。 既定では、色の変化は距離の変化に比例します。つまり、開始境界と終了境界の間の距離の 30% の線には、開始境界の色と終了境界の色との間の距離の 30% の色があります。 色パターンは、開始境界と終了境界の外側で繰り返されます。

LinearGradientBrush オブジェクトの LinearGradientBrush::SetBlend メソッドを呼び出して、色と距離の関係をカスタマイズできます。 たとえば、ブレンド位置を {0, 0.5, 1} に設定し、ブレンド係数を {0, 0.3, 1} に設定するとします。 次に、開始境界と終了境界の間の距離の 50% の線は、開始境界の色と終了境界の色の間の距離の 30% の色になります。

次の例では、線形グラデーション ブラシを作成し、そのブレンドを設定し、ブラシを使用して四角形を塗りつぶします。 その後、コードはブレンドを取得します。 その後、ブレンド係数と位置を検査したり、何らかの方法で使用することができます。

VOID Example_GetBlend(HDC hdc)
{
   Graphics myGraphics(hdc);

   // Create a linear gradient brush, and set its blend.
   REAL fac[] = {0.0f, 0.4f, 0.6f, 1.0f};
   REAL pos[] = {0.0f, 0.2f, 0.8f, 1.0f};

   LinearGradientBrush linGrBrush(
      Point(0, 0), 
      Point(100, 0),
      Color(255, 255, 0, 0),   // red
      Color(255, 0, 0, 255));  // blue

   linGrBrush.SetBlend(fac, pos, 4);

   // Use the linear gradient brush to fill a rectangle.
   myGraphics.FillRectangle(&linGrBrush, 0, 0, 100, 50);

   // Obtain information about the linear gradient brush.
   INT   blendCount;
   REAL* factors = NULL;
   REAL* positions = NULL;

   blendCount = linGrBrush.GetBlendCount();
   factors = new REAL[blendCount];
   positions = new REAL[blendCount];

   linGrBrush.GetBlend(factors, positions, blendCount);

   for(INT j = 0; j < blendCount; ++j)
   {
      // Inspect or use the value in factors[j].
      // Inspect or use the value in positions[j].
   }
}

要件

   
サポートされている最小のクライアント Windows XP、Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー gdiplusbrush.h (Gdiplus.h を含む)
Library Gdiplus.lib
[DLL] Gdiplus.dll

関連項目

ブラシと図形の塗りつぶし

グラデーション ブラシを使用した図形の塗りつぶし

色のグラデーションで図形を塗りつぶす

LinearGradientBrush

LinearGradientBrush::GetBlendCount

LinearGradientBrush::SetBlend

Point