Gammacorrectie toepassen op een gradiënt
U kunt gammacorrectie voor een verloopborstel inschakelen door TRUE door te sturen naar de PathGradientBrush::SetGammaCorrection methode van die borstel. U kunt gammacorrectie uitschakelen door FALSE door te geven aan de PathGradientBrush::SetGammaCorrection methode. Gammacorrectie is standaard uitgeschakeld.
In het volgende voorbeeld wordt een lineaire kleurovergangsborstel gemaakt en wordt dat penseel gebruikt om twee rechthoeken te vullen. De eerste rechthoek wordt gevuld zonder gammacorrectie en de tweede rechthoek wordt gevuld met gammacorrectie.
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 de volgende afbeelding ziet u de twee gevulde rechthoeken. De bovenste rechthoek, die geen gammacorrectie heeft, wordt donker weergegeven in het midden. De onderste rechthoek, die gammacorrectie heeft, lijkt meer uniforme intensiteit te hebben.
In het volgende voorbeeld wordt een padverloopborstel gemaakt op basis van een stervormig pad. De code gebruikt de padverloopborstel waarbij gammacorrectie is uitgeschakeld (standaard) om het pad te vullen. Vervolgens geeft de code TRUE door aan de methode PathGradientBrush::SetGammaCorrection om gammacorrectie in te schakelen voor de padgradiëntborstel. De aanroep van Graphics::TranslateTransform stelt de wereldtransformatie van een Graphics-object in, zodat de volgende aanroep naar Graphics::FillPath een ster vult die rechts van de eerste ster staat.
// 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);
In de volgende afbeelding ziet u de uitvoer van de voorgaande code. De ster aan de rechterkant heeft gammacorrectie. Houd er rekening mee dat de ster aan de linkerkant, die geen gammacorrectie heeft, gebieden heeft die donker lijken.