Freigeben über


Anwenden einer Gammakorrektur auf einen Farbverlauf

Sie können die Gammakorrektur für einen Farbverlaufpinsel aktivieren, indem Sie TRUE an die PathGradientBrush::SetGammaCorrection-Methode dieses Pinsels übergeben. Sie können die Gammakorrektur deaktivieren, indem Sie FALSE an die PathGradientBrush::SetGammaCorrection-Methode übergeben. Gammakorrektur ist standardmäßig deaktiviert.

Im folgenden Beispiel wird ein linearer Farbverlaufspinsel erstellt und dieser Pinsel verwendet, um zwei Rechtecke zu füllen. Das erste Rechteck wird ohne Gammakorrektur ausgefüllt, und das zweite Rechteck wird mit einer Gammakorrektur gefüllt.

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); 

In der folgenden Abbildung werden die zwei gefüllten Rechtecke gezeigt. Das obere Rechteck, ohne Gammakorrektur, erscheint dunkel in der Mitte. Das untere Rechteck, mit Gammakorrektur, scheint eine gleichmäßigere Intensität zu haben.

Abbildung, die zwei Rechtecke zeigt: Die farbige Füllung des ersten variiert in der Intensität, die Füllung des zweiten variiert weniger.

Im folgenden Beispiel wird ein Pfadverlaufspinsel basierend auf einem star-förmigen Pfad erstellt. Der Code verwendet den Pfadverlaufspinsel mit deaktivierter Gammakorrektur (Standardeinstellung), um den Pfad auszufüllen. Anschließend übergibt der Code TRUE an die PathGradientBrush::SetGammaCorrection-Methode , um die Gammakorrektur für den Pfadverlaufspinsel zu aktivieren. Der Aufruf von Graphics::TranslateTransform legt die Welttransformation eines Graphics-Objekts so fest, dass der nachfolgende Aufruf von Graphics::FillPath einen star füllt, der sich rechts neben dem ersten star befindet.

// 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);

Die folgende Abbildung zeigt die Ausgabe des vorangehenden Codes. Die star auf der rechten Seite weist eine Gammakorrektur auf. Beachten Sie, dass die star auf der linken Seite, die keine Gammakorrektur aufweist, dunkle Bereiche aufweist.

Abbildung von zwei fünfzackigen Starts mit farbiger Farbverlaufsfüllung; die erste hat dunkle Bereiche, die zweite nicht