Aplikace gama korekce na gradient
U přechodového štětce můžete povolit korekci gamma předáním TRUE do PathGradientBrush::SetGammaCorrection metody tohoto štětce. Korekci gama můžete zakázat předáním hodnoty FALSE do metody PathGradientBrush::SetGammaCorrection. Oprava gama je ve výchozím nastavení zakázaná.
Následující příklad vytvoří lineární přechodový štětec a pomocí tohoto štětce vyplní dva obdélníky. První obdélník je vyplněn bez gama korekce a druhý obdélník je vyplněn s gama korekcí.
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);
Následující obrázek znázorňuje dva vyplněné obdélníky. Horní obdélník, který nemá opravu gama, se uprostřed zobrazuje tmavě. Dolní obdélník, který má gama korekci, se zdá mít jednotnější intenzitu.
Následující příklad vytvoří cestní gradientní štětec na základě cesty ve tvaru hvězdy. Kód používá gradientový štětec s vypnutou gama korekcí (což je výchozí nastavení) k vyplnění cesty. Pak kód předá TRUE do metody PathGradientBrush::SetGammaCorrection k zapnutí úpravy gamma pro štětec přechodu cesty. Volání Graphics::TranslateTransform nastaví světovou transformaci objektu Graphics tak, že následné volání Graphics::FillPath vyplní hvězdu, která je napravo od první hvězdy.
// 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);
Následující obrázek znázorňuje výstup předchozího kódu. Hvězda vpravo má gamma korekci. Všimněte si, že hvězda na levé straně, která nemá gama korekci, má oblasti, které vypadají tmavě.