我想在把256色的bmp图转成灰度图之前,对彩色图象判断,看它偏红还是偏灰。
怎样能得到bmp图中个象素RGB中R的比例。我是菜鸟,vc和图象处理都刚刚学,毕业设计要用,没办法。
今天第一次来这里发贴,不知道我的问题能看懂不,希望各位高手不要笑话。

解决方案 »

  1.   

    256色bmp图像有一个颜色表,数据区保存的实际上是这个表的一个索引值[0,255]
    如果你知道数据区的一个索引a,则你访问BITMAPINFO(具体结构看MSDN)得到RGB值。你的RGB就保存在BITMAPINFO的一个数据成员中!
      

  2.   

    COLORREF    rgb;
    rgb   =  dc.GetPixel(i,j);  //得到图象上(i,j)点的颜色信息
    GetRValue(rgb);//分别得到R、G、B分量
    GetGValue(rgb);
    GetBValue(rgb);
    用颜色表的概念可能更合理吧
      

  3.   

    BITMAPFILEHEADERBITMAPINFOHEADER  RGBQUADtypedef struct tagRGBQUAD {
      BYTE    rgbBlue; 
      BYTE    rgbGreen; 
      BYTE    rgbRed; 
      BYTE    rgbReserved; 
    } RGBQUAD;
      

  4.   

    kyanitelj(嫣然) 的方法也可以!
      

  5.   

    kyanitelj(嫣然) 的方法实在太慢了。
    可以用createdibsection等函数,速度起码要比这个快3-5倍。
      

  6.   

    256也有非调色板的图像的,我想,那还要直接像素读取吧,
    好多DIB类里面都有这个东东的。
    用DC是最糟糕和最慢的一种方法了,我想。而且那种还要先转成DDB,
      

  7.   

    bmp文件格式:
    位图文件头BITMAPFILEHEADER
    位图信息头BITMAPINFOHEADER
    调色板Palette(256色及以下的使用,16位等真彩色不用)
    实际的位图数据ImageData用 JerryGR(紫咖啡) 的思路,先得到bmp的Palette,
    再通过bmp的ImageData索引Palette的色彩值
      

  8.   

    COLORREF    rgb;
    rgb   =  dc.GetPixel(i,j);  //得到图象上(i,j)点的颜色信息
    GetRValue(rgb);//分别得到R、G、B分量
    GetGValue(rgb);
    GetBValue(rgb);
      

  9.   

    GetRValue在哪?我要写include———?