我呀知道扫描一下然后统计一下了。逐个取像素吧。
  但是我不会这个算法呀,说以下怎么样
     for(i= 0; i< bm.bmhight(); i++)
         for(j=0;j < ...;j++)
  { if(......) zh++;}
其中if里的语句怎么写?

解决方案 »

  1.   

    找到bmp的文件格式,就可以逐个读取颜色值,读取的同时统计,应当不会很困难的。
    一般来说介绍图像处理算法的书会有。
      

  2.   

    我建议你还是研究一下,BMP的图象格式.
    这个很简单,但是写起来有点长.
      

  3.   

    RGB(101,100,99) RGB(220,10,100)算不算在
    RGB(100,100,100)和 RGB(150,100,100)之间,好象你没有确定要统计的范围,R G B都是从 0-255之间变化的
       你的要求不明确
      

  4.   

    chenhq(chenhq), 我的要求不是说的那么明白,但是我的意思是明白的。就算是统计RGB(100,100,100)好了。
      

  5.   

    下面过程是计算图像的直方图的,就是统计灰度图像中256种灰度出现的几率,修改以下就和你用
    void CMainDoc::DoHistogram(HDIB hdib)
    {
    register short i;
    int c;
    static DWORD maxh=0;
    DWORD dwLen;
        BYTE *ptr;
    BITMAPINFOHEADER bi;    
    static int  maxc=0,minc=256;
    if( hdib == 0 )
    return;
    for (i=0;i<256;i++)
    hist[i]=0;
    dwLen = GlobalSize (hdib);
    DibInfo (hdib, &bi);
    ptr = (BYTE *)GlobalLock(hdib);
        ptr += (DWORD)bi.biSize + PaletteSize((LPSTR)&bi);
    dwLen = dwLen - (DWORD)bi.biSize - PaletteSize((LPSTR)&bi);
    while (dwLen--) 
    {
    c = *ptr ;
    if(c>255)
    c =  255;
    if (c>maxc) 
    maxc = c;
    else if (c<minc) 
    minc = c;
    hist[c]++;
    if (maxh<hist[c])
    maxh=hist[c];
    ptr++;
    }
    GlobalUnlock(hdib);
    if(histwind != NULL)
    {
    ::ShowWindow(histwind,SW_HIDE );
    ::ShowWindow(histwind,SW_SHOW );
    }
    return ;
    }
      

  6.   

    这个很简单了256色以下的图象是需要用调色板的.查找调色板,获得RGB值16位色有555,565两种模式0123456789abcdef   
    555模式时 01234位乘8得到r色
              56789这五位乘8得到g色
              abcde这五位乘8得到b色565模式
               01234位乘8得到r色
              56789a这6位乘4得到g色
              bcdef这五位乘8得到b色24位色时候,一个字节表示一种色彩向量
    32位的时候,也是一样怎么写就不么我教了把.
      

  7.   

    florist2000(善良的石头)  我是那种超级菜的,我还是不明白,你可以写一下代码么。就256位图。
      

  8.   

    florist2000(善良的石头)  我是那种超级菜的,我还是不明白,你可以写一下代码么。就256位图。