俺是半路出家的

解决方案 »

  1.   

    http://www.vckbase.com/document/viewdoc.asp?id=674变成灰度的话把rgb都变成(r+g+b)/3
      

  2.   

    24位位图没有调色板,是最简单的位图,每个像素占3字节,分别表示R,G,B分量
      

  3.   

    计算灰度值,0.3 * Red + 0.59 * Green + 0.11 * Blue 这是求加权平均值的公式。
      

  4.   

    24位灰度bmp不需要调色板,r=g=b
    8位灰度需要调色板
      

  5.   

    取出每一点的r,g,b
    然后
    t= (r+g+b)/3
    得到之后把该点的r ,g,b 
    设为 t 就是 r= b= g =  t 就可以了
      

  6.   

    short getGrayLevel(COLORREF clr)
    {
    // 00 rr gg bb
    short gray; gray=(short)(((clr>>16) & 0xff) * 0.3);
    gray+=(short)(((clr>>8) & 0xff) * 0.59);
    gray+=(short)((clr & 0xff) * 0.11);
    return gray;
    //由红,绿,蓝值得到灰度值; 
    //pixels[w*j+i]=(255<<24)|(gray<<16)|(gray<<8)|gray; 
    }
      

  7.   

    同意 arvid_gs(west) ( )
      

  8.   

    24位的视频模视中,每个像素占用8位,其系统调色板有256种颜色.在256视频模视中直接用RGB(R,G,B)宏得到的灰度只有4种,黑,深灰(128,128,128),浅灰(192,192,192),白色.在创建逻辑调色板后(这个过程还包括fill logic palette,cresate palette ,realize palette),就可以看到更多的灰度值,这个值取决于你fill logic palette时填充的颜色值,有限制的.
      

  9.   

    标准公式(源自YUV色彩空间Y值,既亮度或灰度):Y=0.2990R+0.5870G+0.1140B
    24bit位图中RGB 各占8bit,让后你可以把得出Y的值量化为一个0-255之间的 8bit 数据(取整就行)。如果你要用24bit RGB 色彩空间输出这个灰度的话就这样做:Gray=Y+Y*0x100+Y*0x10000;当然,如果嫌整形乘法慢的话,也可以用 happyili(小厨师) 那样移位的方法。
      

  10.   

    还有一点,直接(r+g+b)/3,虽然可以用,但是得出的图像从视觉上并不是很符合我们人眼视觉的习惯。普遍做法就是加权平均。彩色电视信号就是YUV色彩空间的。黑白电视接受彩色信号其实就是分离了其中的Y分量,把另外两个色差信号(U,V)丢掉了。
      

  11.   

    OHA oha1,oha2;
         for (i=0; i<rect.Height(); i++)

    for (j=0; j<rect.Width(); j++)
    {
    oha1.org=::GetPixel(hdc1,j, i);//hdc1为原图像的句柄

    // 近似的转灰度公式 R*0.3+G*0.6+B*0.1
    k = (unsigned char)(((unsigned int)oha1.pix.blue)/10) + \
    (unsigned char)(((unsigned int)oha1.pix.green)*6/10) + \
    (unsigned char)(((unsigned int)oha1.pix.red)*3/10);
                
        oha2.pix.blue  = k;
    oha2.pix.green = k;
    oha2.pix.red   = k;
    ::SetPixel(hdc2,j, i, oha2.org);//hdc2为设置灰度图像的句柄

    }
      OHA 的定义为
      typedef struct 

    unsigned char blue;
    unsigned char green;
    unsigned char red;
    unsigned char alpha;
    } RGBDATA

    typedef union
    {   
    unsigned long org;
    RGBDATA pix;
    } OHA,
      

  12.   

    标准公式:Gray= R*.0299 + G*0.587 + B*0.114整数运算:Gray=(R*299+g*587+B*114+500)/1000 //+500是为了四舍五入
      

  13.   

    看“二、DIB的结构”
    http://www.csdn.net/develop/read_article.asp?id=20442