Nic*_*rin 5 c# colors brightness windows-10
使用Windows 10(10586)的最新稳定版本,Win32窗口标题的颜色会根据窗口镶边的颜色而变化.
例如,如果窗口颜色较暗,则标题使用白色.反之亦然.
所以,既然我想要那种行为,我必须得到窗口铬的颜色亮度.
通过使用此方法:
public static int GetBrightness(this Color c)
{
return (int)Math.Sqrt(
c.R * c.R * .241 +
c.G * c.G * .691 +
c.B * c.B * .068);
}
Run Code Online (Sandbox Code Playgroud)
而我正在使用其他方法:
public static float GetBrightness2(this Color color)
{
float num = ((float)color.R) / 255f;
float num2 = ((float)color.G) / 255f;
float num3 = ((float)color.B) / 255f;
float num4 = num;
float num5 = num;
if (num2 > num4)
num4 = num2;
if (num3 > num4)
num4 = num3;
if (num2 < num5)
num5 = num2;
if (num3 < num5)
num5 = num3;
return ((num4 + num5) / 2f);
}
Run Code Online (Sandbox Code Playgroud)
所以我所要做的就是测试所有颜色以获得阈值(第一种方法,第二种方法):
White Title:
127 0,58
120 0,55
105 0,39
127 0,34
101 0,43
109 0,43
105 0,44
86 0,31
105 0,36
83 0,32
68 0,26
136 0,47
106 0,41
108 0,44
109 0,42
110 0,39
89 0,34
108 0,58
105 0,25
83 0,34
75 0,29
108 0,39
106 0,40
108 0,51
Black Title:
189 0,47
161 0,47
138 0,65
150 0,35
143 0,32
138 0,58
161 0,37
167 0,45
Run Code Online (Sandbox Code Playgroud)
只有少数几种颜色导致黑色标题颜色,而阈值显然是137.
我选择的时候发生了问题Automatically pick an accent color from my background:
Automatic, Black Title:
132 0,37 Color: {#FF94842D}
Run Code Online (Sandbox Code Playgroud)
如你所见,132小于137,但它显示黑色标题.所以我的GetBrightness()方法可能与Windows使用的方法不同.
那么,Windows 10究竟是如何决定标题应该使用的颜色?