次の方法で共有


グラデーションにガンマ補正を適用する

グラデーション ブラシのガンマ補正を有効にするには、そのブラシの PathGradientBrush::SetGammaCorrection メソッドに TRUE を渡します。 ガンマ補正を無効にするには、PathGradientBrush::SetGammaCorrection メソッドに FALSE を渡します。 ガンマ補正は、既定では無効になっています。

次の例では、線形グラデーション ブラシを作成し、そのブラシを使用して 2 つの四角形を塗りつぶします。 最初の四角形はガンマ補正なしで塗りつぶされ、2 番目の四角形はガンマ補正で塗りつぶされます。

LinearGradientBrush linGrBrush(
   Point(0, 10),
   Point(200, 10),
   Color(255, 255, 0, 0),   // Opaque red
   Color(255, 0, 0, 255));  // Opaque blue

graphics.FillRectangle(&linGrBrush, 0, 0, 200, 50);
linGrBrush.SetGammaCorrection(TRUE);
graphics.FillRectangle(&linGrBrush, 0, 60, 200, 50); 

次の図は、2 つの塗りつぶされた四角形を示しています。 ガンマ補正が適用されていない上の四角形は、途中が暗く表示されます。 ガンマ補正が適用されている下の四角形は、より均一な明度で表示されます。

2 つの四角形を示す図: 1 つ目の塗りつぶしは強度で変化し、2 番目の塗りつぶしは少なく変化します

次の例では、star形のパスに基づいてパス グラデーション ブラシを作成します。 このコードでは、ガンマ補正が無効になっているパス グラデーション ブラシ (既定値) を使用してパスを塗りつぶします。 次に、パス グラデーション ブラシのガンマ補正を有効にするために、コードは TRUE をPathGradientBrush::SetGammaCorrection メソッドに渡します。 Graphics::TranslateTransform を呼び出すと、Graphics::FillPath の後続の呼び出しによって、最初のstarの右側にあるstarが塗りつぶされるように、Graphics オブジェクトのワールド変換が設定されます。

// Put the points of a polygon in an array.
Point points[] = {Point(75, 0), Point(100, 50), 
                  Point(150, 50), Point(112, 75),
                  Point(150, 150), Point(75, 100), 
                  Point(0, 150), Point(37, 75), 
                  Point(0, 50), Point(50, 50)};

// Use the array of points to construct a path.
GraphicsPath path;
path.AddLines(points, 10);

// Use the path to construct a path gradient brush.
PathGradientBrush pthGrBrush(&path);

// Set the color at the center of the path to red.
pthGrBrush.SetCenterColor(Color(255, 255, 0, 0));

// Set the colors of the points in the array.
Color colors[] = {Color(255, 0, 0, 0),   Color(255, 0, 255, 0),
                  Color(255, 0, 0, 255), Color(255, 255, 255, 255), 
                  Color(255, 0, 0, 0),   Color(255, 0, 255, 0), 
                  Color(255, 0, 0, 255), Color(255, 255, 255, 255),
                  Color(255, 0, 0, 0),   Color(255, 0, 255, 0)};

int count = 10;
pthGrBrush.SetSurroundColors(colors, &count);

// Fill the path with the path gradient brush.
graphics.FillPath(&pthGrBrush, &path);
pthGrBrush.SetGammaCorrection(TRUE);
graphics.TranslateTransform(200.0f, 0.0f);
graphics.FillPath(&pthGrBrush, &path);

次の図は、上記のコードの出力を示しています。 右側のstarにはガンマ補正があります。 ガンマ補正がない左側のstarには、暗く見える領域があることに注意してください。

2つの5ポイントのイラストは、色付きのグラデーションの塗りつぶしで始まります。1 つ目は暗い領域を持ち、2 つ目は暗い領域を持たない