mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Gamma improvements
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user