我需要一个指导来执行此操作。我遍历所有像素并通过 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/