if(bi.biBitCount=8)
{
for(i=0;i<256;i++)
{
         BYTE blue=(quad+i)->rgbBlue;
BYTE green=(quad+i)->rgbGreen;
BYTE red=(quad+i)->rgbRed;
BYTE gray = (red * 30 + green * 59 + blue * 11) / 100;
(quad+i)->rgbBlue=(BYTE)i;
(quad+i)->rgbGreen=(BYTE)i;
(quad+i)->rgbRed=(BYTE)i;
}
}

解决方案 »

  1.   

    忘了,这一句应该去掉。BYTE gray = (red * 30 + green * 59 + blue * 11) / 100;
      

  2.   

    sxshao(邵世鑫) :不好意思,你能不能说的详细点,我不太明白
      

  3.   

    if(bi.biBitCount=8)
    {
    for(i=0;i<256;i++)
    {
             BYTE blue=(quad+i)->rgbBlue;
    BYTE green=(quad+i)->rgbGreen;
    BYTE red=(quad+i)->rgbRed;
    BYTE gray = (red * 30 + green * 59 + blue * 11) / 100;
    (quad+i)->rgbBlue=gray ;
    (quad+i)->rgbGreen=gray ;
    (quad+i)->rgbRed=gray ;
    }
    }
      

  4.   

    当然可以!
    int MaxColors = imgOriginal.GetMaxColorTableEntries();
    RGBQUAD* ColorTable;
    ColorTable = new RGBQUAD[MaxColors]; imgOriginal.GetColorTable(0,MaxColors,ColorTable);
    for (int i=0; i<MaxColors; i++)
    {
    int avg = (ColorTable[i].rgbBlue + ColorTable[i].rgbGreen + ColorTable[i].rgbRed)/3;
    ColorTable[i].rgbBlue = (BYTE)avg;
    ColorTable[i].rgbGreen = (BYTE)avg;
    ColorTable[i].rgbRed = (BYTE)avg;
    }
    imgOriginal.SetColorTable(0,MaxColors,ColorTable);
    delete(ColorTable);
      

  5.   

    把rgb调色板索引 改成gray索引就行了
      

  6.   

    八位彩图灰度化可以只改调色板,
           ——
    看你如何定义和检验256灰度的了,要是严格检查调色板的话就不行。
    //
    // 
    比如:
    //创建256色灰度调色板
    for( i = 0; i < j; i++ )
    {
    pNewRGBPalette[i].rgbRed = i;
    pNewRGBPalette[i].rgbGreen = i;
    pNewRGBPalette[i].rgbBlue = i;
    }
    //
    以后图像处理时就不用查调色板了。
    //
    // 统计
    for ( y = nY * _TileYStep; y < (nY+1) * _TileYStep; y++ )
    {
    //数据指针定位到图像数据每行的起始零位置
    pTemp =_p256g + (( _YHeight - 1 - y) * _nWidthBytes);
    for ( x = nX * _TileXStep ; x < (nX+1) * _TileXStep; x++)
    {
    if (pTemp[x] == 0)
    {
    _pTilePixel[nI]++;
    }
    }
    }//
      

  7.   

    谢谢各位,我决定把24位的彩色图转化成8位的灰度图,创建一个调色板
    for(i=0;i<256;i++)
    {
    (quad+i)->rgbBlue=(BYTE)i;
    (quad+i)->rgbGreen=(BYTE)i;
    (quad+i)->rgbRed=(BYTE)i;
    }
    然后把像素重新赋值gray.这样以后就不用管调色板了。