C# 如何统计图像像素 找出出现最多的颜色
我想统计一幅图 什么颜色的值出现最多 那应该如何写呢 有没有代码可以给我看看 --------------------编程问答-------------------- 参考(c# 取图片像素的RGB)http://download.csdn.net/detail/wangyue4/2974121遍历一遍每一个像素,然后将rgb的值作为key存到字典里,之后只要有相同颜色的像素,在字典中找到后就把value+1.最后取字典中value最大的 --------------------编程问答-------------------- 不知道你是要精确的颜色还是相近颜色的出现频率。
精确的就要rgb每个值都相同,相近的给出每个颜色的对应范围判断rgb值是否接近就好。
过程就如#1所云。 --------------------编程问答-------------------- 图片就是一个数组,出现最多的颜色,就是这个数组里出现次数做多的数字。
--------------------编程问答-------------------- 获取图片坐标颜色的代码:bmp.GetPixel(X, Y);
其中bmp是图片的实例,X,Y是图片中某点的代码
这样 返回的是一个Color 也就是ARGB的值
不知道你看懂没? --------------------编程问答-------------------- 看到这些回答,一笑而过。 --------------------编程问答-------------------- 可以啊,先按位做量化,然后开辟超大的数组计数,然后按色阶区间大小,取计数总值最大的就行 --------------------编程问答--------------------
用不着,因为只要找最大的。
http://blog.csdn.net/v_JULY_v/article/details/6403777 --------------------编程问答-------------------- 另外可以使用蒙特卡洛法随机抽样统计,一个很小的样本就可以得到很理想的结果。 --------------------编程问答-------------------- 想请教一下,除了排序或者hash统计,还有什么更好的办法。 --------------------编程问答--------------------
人家笑的是获取像素值的方法。 --------------------编程问答-------------------- 大家有没有例子和代码可以给我看一下 我是不是应该把数值存在一个数组入边? --------------------编程问答--------------------
大家有没有例子和代码可以给我看一下 我是不是应该把数值存在一个数组入边?
感觉大家在对牛弹琴。 --------------------编程问答-------------------- 一笑而过。
public static class BitmapHelper
{
[SecurityPermission(SecurityAction.LinkDemand,
Flags = SecurityPermissionFlag.UnmanagedCode)]
public static unsafe Color GetImageAverageColor(Bitmap bitmap)
{
if (bitmap == null)
{
throw new ArgumentNullException("bitmap");
}
int width = bitmap.Width;
int height = bitmap.Height;
Rectangle rect = new Rectangle(0, 0, width, height);
try
{
BitmapData bitmapData = bitmap.LockBits(
rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
byte* scan0 = (byte*)bitmapData.Scan0;
int strideOffset = bitmapData.Stride - bitmapData.Width * 4;
int sum = width * height;
int a = 0;
int r = 0;
int g = 0;
int b = 0;
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
b += *scan0++;
g += *scan0++;
r += *scan0++;
a += *scan0++;
}
scan0 += strideOffset;
}
bitmap.UnlockBits(bitmapData);
a /= sum;
r /= sum;
g /= sum;
b /= sum;
return Color.FromArgb(255, r, g, b);
}
catch
{
return Color.FromArgb(127, 127, 127);
}
}
}
以上代码获取图片主色调。
参考案例是qq的背景取主色调:
(高仿QQ2013通讯DEMO-10.30更新)点击下载
(360安全卫士DEMO)点击下载
补充:.NET技术 , C#