加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 从bmp获取平均颜色

发布时间:2020-12-15 18:12:09 所属栏目:百科 来源:网络整理
导读:我正在开发第二个屏幕的任务栏(像displayfusion). 但是,我从图标中获取正确的平均颜色时遇到困难.例如Google Chrome /当我将鼠标悬停在主任务栏上时,背景变为黄色.我的代码会变成橙色/红色. 这是现在的样子: 如何获得正确的显示/平均色彩? 我使用这段代码
我正在开发第二个屏幕的任务栏(像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);
}

解决方法

平均颜色不是最常用的颜色.我建议计算在一定阈值以上具有饱和度的像素的HUE,并使用数组创建图像的直方图. (使用某种色调值的次数).

然后平滑直方图(用两个邻居计算局部平均值),然后得到这个平滑直方图取最大值的位置.

您可以通过以下方式获取HSL值:

Color.GetHue
Color.GetSaturation
Color.GetBrightness

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读