Condividi tramite


Applicazione della correzione gamma a una sfumatura

È possibile abilitare la correzione gamma per un pennello sfumato passando TRUE al metodo PathGradientBrush::SetGammaCorrection del pennello. È possibile disabilitare la correzione gamma passando FALSE al metodo PathGradientBrush::SetGammaCorrection . La correzione gamma è disabilitata per impostazione predefinita.

Nell'esempio seguente viene creato un pennello sfumato lineare e viene usato tale pennello per riempire due rettangoli. Il primo rettangolo viene riempito senza correzione gamma e il secondo rettangolo viene riempito con correzione 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); 

La figura seguente mostra i due rettangoli riempiti. Il rettangolo superiore, che non ha correzione gamma, appare scuro al centro. Il rettangolo inferiore, con correzione gamma, sembra avere un'intensità più uniforme.

illustrazione che mostra due rettangoli: il riempimento colorato del primo varia in intensità, il riempimento del secondo varia meno

Nell'esempio seguente viene creato un pennello sfumatura di percorso basato su un percorso a forma di star. Il codice usa il pennello sfumatura del percorso con correzione gamma disabilitata (impostazione predefinita) per riempire il percorso. Il codice passa quindi TRUE al metodo PathGradientBrush::SetGammaCorrection per abilitare la correzione gamma per il pennello sfumato del percorso. La chiamata a Graphics::TranslateTransform imposta la trasformazione globale di un oggetto Graphics in modo che la chiamata successiva a Graphics::FillPath riempia una star che si trova a destra del primo 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);

La figura seguente mostra l'output del codice precedente. Il star a destra ha correzione gamma. Si noti che la star a sinistra, che non dispone di correzione gamma, ha aree che appaiono scure.

illustrazione di due cinque punte inizia con riempimento sfumato colorato; il primo ha aree scure, il secondo non