Aplicar corrección gamma a un degradado
Puede habilitar la corrección gamma para un pincel degradado pasando TRUE al método PathGradientBrush::SetGammaCorrection de ese pincel. Puede deshabilitar la corrección gamma pasando FALSE al método PathGradientBrush::SetGammaCorrection . La corrección gamma está deshabilitada de forma predeterminada.
En el ejemplo siguiente se crea un pincel degradado lineal y se usa ese pincel para rellenar dos rectángulos. El primer rectángulo se rellena sin corrección gamma y el segundo rectángulo se rellena con corrección 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);
En la siguiente ilustración se muestran los dos rectángulos rellenados: El rectángulo superior, que no tiene corrección gamma, aparece oscuro en el medio. El rectángulo inferior, que tiene corrección gamma, parece tener una intensidad más uniforme.
En el ejemplo siguiente se crea un pincel de degradado de trazado basado en una ruta de acceso con forma de star. El código usa el pincel de degradado de ruta con la corrección gamma deshabilitada (el valor predeterminado) para rellenar la ruta de acceso. A continuación, el código pasa TRUE al método PathGradientBrush::SetGammaCorrection para habilitar la corrección gamma para el pincel de degradado de ruta. La llamada a Graphics::TranslateTransform establece la transformación mundial de un objeto Graphics para que la llamada posterior a Graphics::FillPath rellene un star que se encuentra a la derecha del primer star.
// 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);
En la ilustración siguiente se muestra la salida del código anterior. El star de la derecha tiene corrección gamma. Tenga en cuenta que el star a la izquierda, que no tiene corrección gamma, tiene áreas que aparecen oscuras.