我想统计一幅图 什么颜色的值出现最多  那应该如何写呢  有没有代码可以给我看看

解决方案 »

  1.   

    参考(c# 取图片像素的RGB)http://download.csdn.net/detail/wangyue4/2974121
    遍历一遍每一个像素,然后将rgb的值作为key存到字典里,之后只要有相同颜色的像素,在字典中找到后就把value+1.最后取字典中value最大的
      

  2.   

    不知道你是要精确的颜色还是相近颜色的出现频率。
    精确的就要rgb每个值都相同,相近的给出每个颜色的对应范围判断rgb值是否接近就好。
    过程就如#1所云。
      

  3.   

    获取图片坐标颜色的代码:bmp.GetPixel(X, Y); 
    其中bmp是图片的实例,X,Y是图片中某点的代码
    这样 返回的是一个Color   也就是ARGB的值 
    不知道你看懂没?
      

  4.   


    用不着,因为只要找最大的。http://blog.csdn.net/v_JULY_v/article/details/6403777
      

  5.   

    想请教一下,除了排序或者hash统计,还有什么更好的办法。
      

  6.   

    一笑而过。    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)点击下载