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;
|
namespace GHelper.Display
|
||||||
using System.Reflection.Metadata.Ecma335;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
namespace GHelper.Display
|
|
||||||
{
|
{
|
||||||
|
|
||||||
public class DisplayGammaRamp
|
public class DisplayGammaRamp
|
||||||
{
|
{
|
||||||
|
|
||||||
public DisplayGammaRamp(ushort[] red, ushort[] green, ushort[] blue)
|
public DisplayGammaRamp(ushort[] red, ushort[] green, ushort[] blue)
|
||||||
{
|
{
|
||||||
if (red?.Length != GammaRamp.DataPoints)
|
if (red?.Length != GammaRamp.DataPoints)
|
||||||
@@ -67,20 +63,30 @@ namespace GHelper.Display
|
|||||||
public ushort[] Red { get; }
|
public ushort[] Red { get; }
|
||||||
private static ushort[] CalculateLUT(double brightness, double contrast, double gamma)
|
private static ushort[] CalculateLUT(double brightness, double contrast, double gamma)
|
||||||
{
|
{
|
||||||
|
brightness = 0.5 + brightness / 2;
|
||||||
var result = new ushort[GammaRamp.DataPoints];
|
var result = new ushort[GammaRamp.DataPoints];
|
||||||
for (var i = 0; i < result.Length; i++)
|
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;
|
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)
|
private static ushort[] Brightness(ushort[] data, double brightness)
|
||||||
{
|
{
|
||||||
|
brightness = 0.5 + brightness / 2;
|
||||||
var result = new ushort[GammaRamp.DataPoints];
|
var result = new ushort[GammaRamp.DataPoints];
|
||||||
for (var i = 0; i < result.Length; i++)
|
for (var i = 0; i < result.Length; i++)
|
||||||
{
|
{
|
||||||
result[i] = (ushort)(data[i]*brightness);
|
result[i] = (ushort)(data[i] * brightness);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ namespace GHelper.Display
|
|||||||
public void SetGamma(int brightness = 100, int contrast = 100)
|
public void SetGamma(int brightness = 100, int contrast = 100)
|
||||||
{
|
{
|
||||||
var bright = (float)(brightness) / 100;
|
var bright = (float)(brightness) / 100;
|
||||||
Logger.WriteLine("Brightness: " + bright.ToString());
|
|
||||||
|
|
||||||
var screenName = ScreenNative.FindLaptopScreen();
|
var screenName = ScreenNative.FindLaptopScreen();
|
||||||
if (screenName is null) return;
|
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);
|
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)
|
} catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user