获取图片的主色调

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);
}


知识共享许可协议
《获取图片的主色调》常伟华 创作。
采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。
相邻依据:发表时间
  • 多说评论
  • 签名
  • 新浪微博
  • 默认评论
  • Tab Header 5

0 条评论 / 点击此处发表评论

Tab Content 5

开发技术


开发平台和工具

sitemap     178.11ms