title image


Smiley Gamma-Rampen!
Da gibt es Gamma-Rampen, d.h. der RAMDAC auf deiner Graka schaut nach, welche Spannung er für welchen Farbwert er ausgeben muss. Mit diesem Rampen kann man auch Helligkeit und Kontrast regeln. So geht Gamma:



TGammaRamp = packed record

R, G, B: Array[0..255] Of Word;

end;



var

OldGammaRamp, : TGammaRamp;

DesktopDc: Cardinal;



procedure MakeNewRamp(DeviceContext: Cardinal; Brightness, Contrast, Gamma: Single);

var

R: TGammaRamp;

I: Integer;

W: Word;

V: Single;

begin

FillChar(R, SizeOf(R), 0);



For I := 0 To 255 Do begin

V := I / 255.0;

If V 1.0 Then

V := 1.0 - Exp(Ln(1.0 - V) * Gamma); // Gamma > 0

V := (V - 0.5) * Contrast + 0.5; // Contrast > 0

V := V + Brightness - 1.0; // 0 <= Brightness <= 2



If V < 0.0 Then

V := 0.0;

If V > 1.0 Then

V := 1.0;



W := Byte(Round(V * 255.0)) Shl 8;

R.R[I] := W;

R.G[I] := W;

R.B[I] := W;

end;



SetDeviceGammaRamp(DeviceContext, R);

end;



begin

// DC holen

DesktopDc := GetDc(0);

// Alten Wert speichern

GetDeviceGammaRamp(DesktopDc, OldGammaRamp);



// Wert verändern

// 1 = Normal (bei allen Werten)

// Wir setzten Mal Gamma heller

MakeNewRamp(DesktopDc, 1, 1, 1.5);



{ ... }



// Rampe wiederherstellen (bei Programmende

SetDeviceGammaRamp(DesktopDc, OldGammaRamp);

// DC freigeben

ReleaseDc(0, DesktopDc);

end.





Das Dumme ist nur, dass man den Wert nicht auslesen kann. Zumindest nicht als Gamma-Angabe. Man kann ihn nur verändern.

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: