OnLButtonDown()
{
CDC *pDC = new CDC();
CDC *dc = GetDC();
pDC->CreateCompatibleDC(dc);                  //以下画图函数均使用彩色
pDC->FillSolidRect(........);
pDC->SetPixelV(........);
         ...
         ...
         ...      //等画图函数         dc->StretchBlt(0,0,200,200,pDC,0,0,100,100,SRCCOPY);
                  // 到此, 图像变成黑白的了.
ReleaseDC(dc);
}
//--------------- 请高手帮忙! --------------------

解决方案 »

  1.   

    取出一个点,按以下公式计算:
    RGB( GetRValue( clr ) * 0.3, GetGValue( clr ) * 0.59, GetBValue( clr ) * 0.11 )其中,clr为彩色值,生成的新值为一定灰度的黑白色。
      

  2.   

    sorry,一点错误,生成的新值为一个单值,要重新组合RGB,COLORREF clr = dc.GetPixel( 0, 0 );
    int c = GetRValue( clr ) * 0.3, GetGValue( clr ) * 0.59, GetBValue( clr ) * 0.11;
    COLORREF clrNew = RGB( c, c, c );
      

  3.   

    能告诉我这是为什么?
    COLORREF clrNew = RGB( c, c, c );
    怎么都是c啊?
      

  4.   

    灰度值的红、绿、蓝都是一样的。
    就好像0,0,0是黑,128,128,128是灰,255,255,255是白一样,
    你可以试试,R、G、B相同的色彩一定是个灰度值。
      

  5.   

    |Y| |0.299  0.587  0.114|  |R| 
    |U|=|  a      b      c  |* |G|    
    |V| |  d      e      f  |  |B| (其中a+b+c=0   d+e+f=0  Y表示亮度 U V 表示色彩 色调 )          
    首先算得Y=0.299*R+0.587*G+0.114*B  得到该点对应的亮度Y
    然后令R=G=B=Y,这样U V都为零,这样就屏蔽了图像的色彩信息 只保留了亮度信息
    是一副灰度范围在0-255之间的灰度图
    这其实就是彩色图转换为灰度图的原理(有三种:最大值法 平均值法 加权法)