C# - Gamma korrekció végrehajtása

forráskód letöltése
Az ún. Gamma korrekció nélküli rajzoláskor bizonyos színek közötti átmenet esetén a kép egyre sötétebb árnyalatot kap, minél nagyobb mind a két szín összetevő mértéke. Például zöld és piros szín közötti színátmenet esetén ez nagyon jól látszik azon a ponton, ahol a zöld is és a piros is 50 - 50%-ban van jelen.
A Gamma korrekció felhasználásával arra nyílik lehetőség, hogy elkerüljük ezt a sötét árnyalat megjelenését és a színátmenet folyamatos legyen két tetszőleges szín között.
Színátmenet rajzolásához a LinearGradientBrush osztály által nyújtott ecsetet kell felhasználnunk. Itt megadható két tetszőleges szín, mely között az átmenet megvalósul.
A Gamma korrekció alkalmazása igen egyszerű feladat.
GammaCorrection
Osztály: System.Drawing.Drawing2D.LinearGradientBrush
public bool GammaCorrection {get; set;}
A GammaCorrection property igazra állításával a színátmenet képzésekor Gamma korrekció kerül végrehajtásra, így a sötétebb árnyalatok elkerülhetők a színátmenetben.
A mellékelt példában kirajzolunk két téglalapot különböző színekkel, melyek között színátmenet történik. Az egyik téglalapnál kihasználjuk a Gamma korrekciót míg a másiknál nem, így jól megfigyelhető a különbség.
    private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
      Graphics g = e.Graphics;
      ...
      Rectangle r2 = new Rectangle(5, 110, ClientRectangle.Width-10, 100);
      LinearGradientBrush brush2 = new LinearGradientBrush(r2, c1, c2, 135, true);
      brush2.SetBlendTriangularShape(0.5f);           
      brush2.GammaCorrection = true;
      g.FillRectangle(brush2, r2);
      ...
    }