public bool Set(float gamma) { if (_orginalRamp == null && !TrySetDefaultRamp()) { return(false); } if (gamma <= 5 && gamma >= 0) { WinApi.RAMP ramp = new WinApi.RAMP(); ramp.Red = new ushort[256]; ramp.Green = new ushort[256]; ramp.Blue = new ushort[256]; for (int i = 1; i < 256; i++) { var iArrayValue = Math.Pow((i + 1) / 256.0, gamma) * 65535 + 0.5; if (iArrayValue > 65535) { iArrayValue = 65535; } ramp.Red[i] = ramp.Blue[i] = ramp.Green[i] = (ushort)iArrayValue; } CurrentGamma = gamma; return(WinApi.SetDeviceGammaRamp(createdDC, ref ramp)); } return(false); }
private bool TrySetDefaultRamp() { var ramp = new WinApi.RAMP(); if (!WinApi.GetDeviceGammaRamp(createdDC, ref ramp)) { return(false); } _orginalRamp = ramp; return(true); }