c# - 如何从图像中获取前 5 种最常用的 RGB 颜色?

标签 c#

我需要一个指导来执行此操作。我遍历所有像素并通过 GetPixel() 方法获取值。接下来我该做什么?

最佳答案

这是获取所有像素的辅助方法:

public static IEnumerable<Color> GetPixels(Bitmap bitmap)
{
    for (int x = 0; x < bitmap.Width; x++)
    {
        for (int y = 0; y < bitmap.Height; y++)
        {
            Color pixel = bitmap.GetPixel(x, y);
            yield return pixel;
        }
    }
}

如果您只需要颜色(没有计数器):

using (var bitmap = new Bitmap(@"..."))
{
    var mostUsedColors =
        GetPixels(bitmap)
            .GroupBy(color => color)
            .OrderByDescending(grp => grp.Count())
            .Select(grp => grp.Key)
            .Take(5);
    foreach (var color in mostUsedColors)
    {
        Console.WriteLine("Color {0}", color);
    }
}

顺便说一下,这里是用计数器选择的前 5 种最常用的颜色:

using (var bitmap = new Bitmap(@"..."))
{
    var colorsWithCount =
        GetPixels(bitmap)
            .GroupBy(color => color)
            .Select(grp =>
                new
                    {
                        Color = grp.Key,
                        Count = grp.Count()
                    })
            .OrderByDescending(x => x.Count)
            .Take(5);

    foreach (var colorWithCount in colorsWithCount)
    {
        Console.WriteLine("Color {0}, count: {1}",
            colorWithCount.Color, colorWithCount.Count);
    }
}

关于c# - 如何从图像中获取前 5 种最常用的 RGB 颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11712613/

相关文章:

c# - 用于 OnSelect 和 OnDeselect 目的的委托(delegate)

c# - 列出 1...n 之间的 k 个整数的所有可能组合(n 选择 k)

c# - Newtonsoft Json.Net 序列化 JObject 不会忽略空值,即使设置正确

c# - 可部署数据库测试方法

c# - 听wav文件C#

c# - C# 中泛型类型的缺点

c# - 列不允许 DBNull.Value - 没有 KeepNulls - 正确的列映射

c# - .NET 中的 N 层架构模式中的哪一层应该填充并发和任务

c# - ServiceStack Razor 身份验证

c# - 在 IE 扩展中显示本 map 标