参照Jpeglib的图像灰度化方法:
像素颜色 = 0.299*red+0.587*Green+0.114*Blue.
按像素取24位彩图的每一个点的颜色值。
存储为新灰度图一个像素(一个字节)
调色板是:rgb(0,0,0)......rgb(255,255,255)

解决方案 »

  1.   

    取得某点的 color(COLORREF cl)BYTE r,g,b;r=GetRValue(cl);
    g=GetGValue(cl);
    b=GetBValue(cl);将 r,g,b 各自成方,求和,然后,开方.
    得到一个 double value( double tmp)
    tmp 强行转化为 BYTE v;
    cl=RGB(v,v,v)
    这样,将所有的点转化后,就得到了灰度图像.
      

  2.   

    // RGBToYIQ_Y -RGB转YIQ空间的Y分量
    // 参数:
    // nWidth -图像的宽度
    // nHeight -图像的高度
    // lpPixel -指向图像像素起始位置的指针
    bool RGBToYIQ_Y(int nWidth, int nHeight, LPBYTE lpPixel)
    {
    long i;
    int B, G, R, Y;
      LPBYTE lpSrc = lpPixel;
    LPBYTE lpDst = lpPixel; for (i = 0; i < nHeight * nWidth; i++)
    {
    B = *lpSrc;
    G = *(lpSrc + 1);
    R = *(lpSrc + 2); lpSrc += 3; Y = (int) (0.299 * R + 0.587 * G + 0.114 * B);
    if (Y < 0) Y = 0;
    if (Y > 255) Y = 255; *lpDst = (char) Y;
    *(lpDst + 1) = (char) Y;
    *(lpDst + 2) = (char) Y; lpDst += 3;
    } return TRUE;
    }
      

  3.   

    灰度值只是R=G=B,
    你可以用val=(R+G+B)/3来当新的RGB值来用,把
    COLORREF c;
    GetPixels(x,y,c)   //读出来
    GetRValue(c)得到R值
    GetGValue(c)得到G值
    GetBValue(c)得到B值
    val=(R+G+B)/3
    SetPixels(x,y,RGB(val,val,val))//写回去
    也可以不用平均值用比例系数来做,方法类似
      

  4.   

    email 给你源码
    huqiming(胡其明) is right
      

  5.   

    **********8***** TO:  cris919(lovean)*************
     谢谢! :)Email : [email protected]