Application d’une correction gamma à un dégradé
Vous pouvez activer la correction gamma pour un pinceau de dégradé en passant true à la méthode PathGradientBrush :: SetGammaCorrection de ce pinceau. Vous pouvez désactiver la correction gamma en passant la valeur false à la méthode PathGradientBrush :: SetGammaCorrection . La correction gamma est désactivée par défaut.
L’exemple suivant crée un pinceau de dégradé linéaire et utilise ce pinceau pour remplir deux rectangles. Le premier rectangle est rempli sans correction gamma et le deuxième rectangle est rempli avec la correction gamma.
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);
L’illustration suivante montre les deux rectangles remplis. Le rectangle supérieur, qui n’a pas de correction gamma, apparaît sombre au milieu. Le rectangle inférieur, qui a une correction gamma, semble avoir une intensité plus uniforme.

L’exemple suivant crée un pinceau de dégradé de tracé basé sur un tracé en forme d’étoile. Le code utilise le pinceau de dégradé de tracé avec la correction gamma désactivée (valeur par défaut) pour remplir le tracé. Ensuite, le code passe true à la méthode PathGradientBrush :: SetGammaCorrection pour activer la correction gamma pour le pinceau de dégradé du tracé. L’appel à Graphics :: TranslateTransform définit la transformation universelle d’un objet Graphics afin que l’appel suivant à Graphics :: FillPath remplisse une étoile qui se trouve à droite de la première étoile.
// 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);
L’illustration suivante montre la sortie du code précédent. L’étoile à droite a une correction gamma. Notez que l’étoile sur la gauche, qui n’a pas de correction gamma, a des zones qui apparaissent sombres.
