SetDeviceGammaRamp // GetDeviceGammaRamp
Lo que hace es seleccionar la "curva gamma" de la tarjeta gráfica.
Lo que hace es seleccionar la "curva gamma" de la tarjeta gráfica.
Según Wikipedia:
La correccion gamma, no-linearidad gamma, codificacion gamma, o simplemente gamma, es como se denomina cierta operacion no-lineal que se usa para codificar y decodificar luminancia o valores triestimulos en sistemas de video o imagen.La correccion gamma es, en su forma mas sencilla, definida por la siguiente ley de potencias:
donde
es una constante y las entradas y salidas son valores reales no negativos; en el caso comun de
, las entradas y salidas caen tipicamente en el rango 0-1. Un valor gamma γ < 1 a veces se denomina gamma de codificacion, y el proceso de codificar con esta compresion no-lineal basada en una ley de potencias se llama compresion gamma; a la inversa un valor gamma y > 1 se llama gamma de decodificacion y la aplicacion de la ley de potencias expansiva se llama expansion gamma.
Codificación en Delphi :
type tRamp=array[0..2, 0..255] of Word; var lRamp,lRamp1: tRamp; function AjustarBrillo(Brillo: Byte): Boolean; var i, Delta: Integer; DC: HDC; begin Result := False; DC := GetDC(0); // obtener handle de screen if DC <> 0 then // obtenido ? begin for i := 0 to 255 do begin Delta := i * (Brillo+128 ); if Delta > 65535 then Delta := 65535; //evitar desborde lRamp[0, i]:= Delta; // Red lRamp[1, i]:= Delta; // Green lRamp[2, i]:= Delta; // Blue end; Result := SetDeviceGammaRamp(DC, lRamp); // ajustar gama ReleaseDC(0, DC); // liberar DC end; end; // Obtengo el brillo actual en el evento Oncreate de la aplicación function ObtenerBrillo : tRamp; begin DC := GetDC(0); // obtener handle de screen windows.GetDeviceGammaRamp(DC,lRamp1); ReleaseDC(0, DC); // liberar DC Result:=lRamp1; end;