我正在为第二个屏幕开发一个任务栏(类似于displayfusion)。
但是,我很难从图标中获得正确的平均颜色。例如 Google Chrome/当我将其悬停在主任务栏上时,它的背景会变成黄色。使用我的代码它会变成橙色/红色。
现在看起来是这样的:
如何获得正确的主色/平均色?
我使用此代码来计算平均颜色:
public static Color getDominantColor(Bitmap bmp)
{
//Used for tally
int r = 0;
int g = 0;
int b = 0;
int total = 0;
for (int x = 0; x < bmp.Width; x++)
{
for (int y = 0; y < bmp.Height; y++)
{
Color clr = bmp.GetPixel(x, y);
r += clr.R;
g += clr.G;
b += clr.B;
total++;
}
}
//Calculate average
r /= total;
g /= total;
b /= total;
return Color.FromArgb(r, g, b);
}
平均颜色不一定是最常用的颜色。我建议计算饱和度超过特定阈值的像素的色调,并使用数组创建图像的直方图。 (某个色调值被使用了多少次)。
然后平滑直方图(计算两个邻居的局部平均值),然后得到平滑后的直方图取最大值的位置。
您可以通过以下方式获取 HSL 值:
Color.GetHue
Color.GetSaturation
Color.GetBrightness
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)