SetDeviceGammaRamp // GetDeviceGammaRamp
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;
Hola, lo he probado en Windows 7 y funciona sin problemas. ¿alguien puede indicarme si lo ha probado en Windows XP?
ResponderEliminarYo lo he probado desde Windows XP y funciona muy bien.
ResponderEliminarCon WindowsXP y pantalla TFT funciona bien. ¡¡ Buen truco lo de SetDeviceGammaRamp !!
ResponderEliminar