diff --git a/app/Display/DisplayGammaRamp.cs b/app/Display/DisplayGammaRamp.cs index cdd30a5e..5ff71672 100644 --- a/app/Display/DisplayGammaRamp.cs +++ b/app/Display/DisplayGammaRamp.cs @@ -1,13 +1,9 @@ -using System.Diagnostics; -using System.Reflection.Metadata.Ecma335; -using System.Runtime.InteropServices; - -namespace GHelper.Display +namespace GHelper.Display { - + public class DisplayGammaRamp { - + public DisplayGammaRamp(ushort[] red, ushort[] green, ushort[] blue) { if (red?.Length != GammaRamp.DataPoints) @@ -67,20 +63,30 @@ namespace GHelper.Display public ushort[] Red { get; } private static ushort[] CalculateLUT(double brightness, double contrast, double gamma) { + brightness = 0.5 + brightness / 2; var result = new ushort[GammaRamp.DataPoints]; for (var i = 0; i < result.Length; i++) { - result[i] = (ushort)((0.5 + brightness / 2) * ushort.MaxValue * i / (float)(result.Length - 1)); + result[i] = (ushort)(brightness * ushort.MaxValue * i / (float)(result.Length - 1)); } return result; } + public bool IsOriginal() + { + int MaxRed = Red[Red.Length - 1]; + int MaxGreen = Green[Green.Length - 1]; + int MaxBlue = Blue[Blue.Length - 1]; + return (Math.Abs((MaxRed + MaxGreen + MaxBlue) / 3 - ushort.MaxValue) < 256); + } + private static ushort[] Brightness(ushort[] data, double brightness) { + brightness = 0.5 + brightness / 2; var result = new ushort[GammaRamp.DataPoints]; for (var i = 0; i < result.Length; i++) { - result[i] = (ushort)(data[i]*brightness); + result[i] = (ushort)(data[i] * brightness); } return result; } diff --git a/app/Display/ScreenControl.cs b/app/Display/ScreenControl.cs index eb698ffd..148f31cb 100644 --- a/app/Display/ScreenControl.cs +++ b/app/Display/ScreenControl.cs @@ -50,7 +50,6 @@ namespace GHelper.Display public void SetGamma(int brightness = 100, int contrast = 100) { var bright = (float)(brightness) / 100; - Logger.WriteLine("Brightness: " + bright.ToString()); var screenName = ScreenNative.FindLaptopScreen(); if (screenName is null) return; @@ -70,10 +69,16 @@ namespace GHelper.Display } } - if (gammaRamp is null) gammaRamp = new DisplayGammaRamp(); + if (gammaRamp is null || !gammaRamp.IsOriginal()) + { + Logger.WriteLine("Default Gamma"); + gammaRamp = new DisplayGammaRamp(); + } var ramp = gammaRamp.AsBrightnessRamp(bright); - ScreenNative.SetDeviceGammaRamp(handle, ref ramp); + bool result = ScreenNative.SetDeviceGammaRamp(handle, ref ramp); + + Logger.WriteLine("Brightness " + bright.ToString() + ": " + result); } catch (Exception ex) {