Bagikan melalui


Menerapkan Koreksi Gamma ke Gradien

Anda dapat mengaktifkan koreksi gamma untuk sikat gradien dengan meneruskan TRUE ke metode PathGradientBrush::SetGammaCorrection dari kuas tersebut. Anda dapat menonaktifkan koreksi gamma dengan meneruskan FALSE ke metode PathGradientBrush::SetGammaCorrection . Koreksi Gamma dinonaktifkan secara default.

Contoh berikut membuat sikat gradien linier dan menggunakan kuas tersebut untuk mengisi dua persegi panjang. Persegi panjang pertama diisi tanpa koreksi gamma dan persegi panjang kedua diisi dengan koreksi 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); 

Ilustrasi berikut menunjukkan dua persegi panjang yang diisi. Persegi panjang atas, yang tidak memiliki koreksi gamma, tampak gelap di tengah. Persegi panjang bawah, yang memiliki koreksi gamma, tampaknya memiliki intensitas yang lebih seragam.

ilustrasi memperlihatkan dua persegi panjang: isian berwarna dari yang pertama bervariasi intensitas, isi kedua bervariasi lebih sedikit

Contoh berikut membuat sikat gradien jalur berdasarkan jalur berbentuk star. Kode menggunakan sikat gradien jalur dengan koreksi gamma dinonaktifkan (default) untuk mengisi jalur. Kemudian kode meneruskan TRUE ke metode PathGradientBrush::SetGammaCorrection untuk mengaktifkan koreksi gamma untuk sikat gradien jalur. Panggilan ke Graphics::TranslateTransform mengatur transformasi dunia objek Grafis sehingga panggilan berikutnya ke Graphics::FillPath mengisi star yang berada di sebelah kanan star pertama.

// 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);

Ilustrasi berikut menunjukkan output kode sebelumnya. Star di sebelah kanan memiliki koreksi gamma. Perhatikan bahwa star di sebelah kiri, yang tidak memiliki koreksi gamma, memiliki area yang tampak gelap.

ilustrasi dua awal lima titik dengan isi gradien berwarna; yang pertama memiliki area gelap, yang kedua tidak