.net - 如何获得图像中的多数颜色?

标签 .net wpf windows

我想在 .NET 中检索背景图像中的主要颜色。可能吗?

最佳答案

您可以遍历图像中的所有像素并使用 getPixel 方法确定 RGB 值。然后你可以有一个字典来存储 ARGB 值和一个计数。然后,您可以查看图像中出现最多的 ARGB 值。

var list = new Dictionary<int, int>();
Bitmap myImage = (Bitmap)Bitmap.FromFile("C:/test.jpeg");
for (int x = 0; x < myImage.Width; x++)
{
    for (int y = 0; y < myImage.Height; y++)
    {
        int rgb = myImage.GetPixel(x, y).ToArgb();
        if (!list.ContainsKey(rgb))
            list.Add(rgb, 1);
        else
            list[rgb]++;
    }
}

正如所指出的,这对相似的颜色没有同情心。如果您想要一种更“一般”的多数颜色,您可以对相似性设置一个阈值。例如而不是:

if (!list.ContainsKey(rgb))
        list.Add(rgb, 1);
    else
        list[rgb]++;

你可以这样做:

var added = false;
for (int i = 0; i < 10; i++)
{
    if (list.ContainsKey(rgb+i))
    {
        list[rgb+i]++;
        added = true;
        break;
    }
    if (list.ContainsKey(rgb-i))
    {
        list[rgb-i]++;
        added = true;
        break;
    }
}
if(!added)
    list.Add(rgb, 1);

您可以将阈值 10 提高到您需要的任何值。

关于.net - 如何获得图像中的多数颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2545796/

相关文章:

c# - 是否有一种简单/内置的方法来获取 XAML 元素的精确副本(克隆)?

windows - 无法将文件复制到 "test-Path"可以看到的路径

.net - 如何在clickonce部署时修改配置文件?

c# - 如何使用 C# 迭代分层数据并输出层次结构

wpf - 处置 StreamResourceInfo.Stream

WPF Styles - 请帮助我理解为什么它会这样工作

python - 在 Windows 后台根据键盘记录器输入运行 Python Clicker

windows - TNetSharingManager访问冲突问题

c# - 我是否必须处理不使用的退回对象?

.net - 日志中的 BinarySecurityToken