111,079
社区成员




Color get_major_color(Bitmap bitmap)
{
//色调的总和
var sum_hue = 0d;
//色差的阈值
var threshold = 30;
//计算色调总和
for (int h = 0; h < bitmap.Height; h++)
{
for (int w = 0; w < bitmap.Width; w++)
{
var hue = bitmap.GetPixel(w, h).GetHue();
sum_hue += hue;
}
}
var avg_hue = sum_hue / (bitmap.Width * bitmap.Height);
//色差大于阈值的颜色值
var rgbs = new List<Color>();
for (int h = 0; h < bitmap.Height; h++)
{
for (int w = 0; w < bitmap.Width; w++)
{
var color = bitmap.GetPixel(w, h);
var hue = color.GetHue();
//如果色差大于阈值,则加入列表
if (Math.Abs(hue - avg_hue) > threshold)
{
rgbs.Add(color);
}
}
}
if (rgbs.Count == 0)
return Color.Black;
//计算列表中的颜色均值,结果即为该图片的主色调
int sum_r = 0, sum_g = 0, sum_b = 0;
foreach (var rgb in rgbs)
{
sum_r += rgb.R;
sum_g += rgb.G;
sum_b += rgb.B;
}
return Color.FromArgb(sum_r / rgbs.Count,
sum_g / rgbs.Count,
sum_b / rgbs.Count);
}