当前位置:编程学习 > C#/ASP.NET >>

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的值 
不知道你看懂没? --------------------编程问答-------------------- 看到这些回答,一笑而过。  --------------------编程问答-------------------- 可以啊,先按位做量化,然后开辟超大的数组计数,然后按色阶区间大小,取计数总值最大的就行 --------------------编程问答--------------------
引用 1 楼 wangyue4 的回复:
参考(c# 取图片像素的RGB)http://download.csdn.net/detail/wangyue4/2974121
遍历一遍每一个像素,然后将rgb的值作为key存到字典里,之后只要有相同颜色的像素,在字典中找到后就把value+1.最后取字典中value最大的


用不着,因为只要找最大的。

http://blog.csdn.net/v_JULY_v/article/details/6403777 --------------------编程问答-------------------- 另外可以使用蒙特卡洛法随机抽样统计,一个很小的样本就可以得到很理想的结果。 --------------------编程问答--------------------
引用 5 楼 laviewpbt 的回复:
看到这些回答,一笑而过。 
想请教一下,除了排序或者hash统计,还有什么更好的办法。 --------------------编程问答--------------------
引用 9 楼 sbwwkmyd 的回复:
Quote: 引用 5 楼 laviewpbt 的回复:
看到这些回答,一笑而过。 
想请教一下,除了排序或者hash统计,还有什么更好的办法。

人家笑的是获取像素值的方法。 --------------------编程问答-------------------- 大家有没有例子和代码可以给我看一下  我是不是应该把数值存在一个数组入边? --------------------编程问答--------------------
引用 11 楼 u012160576 的回复:
大家有没有例子和代码可以给我看一下  我是不是应该把数值存在一个数组入边?

感觉大家在对牛弹琴。 --------------------编程问答-------------------- 一笑而过。

    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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,