Eine Gammakorrektur ist im Grunde nichts weiter, als die Formel "Farbe^Gamma", wobei Farbe die jeweiligen Anteile (
RGB) sind, auf einen Bereich von 0..1 skaliert.
Delphi-Quellcode:
var
c1, c2: TColor;
Gamma: Double;
begin
Gamma := 1.2;
c2 :=
rgb(
trunc(Power((RedComponent(c1)/255), Gamma)*255),
trunc(Power((GreenComponent(c1)/255), Gamma)*255),
trunc(Power((BlueComponent(c1)/255), Gamma)*255));
Und das dann für jeden Pixel.
Eine andere, wie ich finde aber sauberere Methode ist es, wenn man den Gammawert für die Helligkeit ändert. Dafür müsstest du dann die Farben zunächst in das HSB-Farbmodell umrechnen, die Helligkeitskomponente auf 0..1 skalieren, Gammakorrektur machen, zurückskalieren, und wieder in
RGB zurückrechnen. Oben geschriebenes dürfte aber die Methode sein, die fast immer eingesetzt wird.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)