我想获得的是RGB中B的灰度值
我的代码是这样的:
RGBQUAD cColor;
cColor=m_dib.GetPixel(x1, y1);
int a=cColor[10].rgbBlue;
所要的就是a 
其中GetPixel(x,y)函数是这样的
RGBQUAD CDib::GetPixel(int x, int y)
{
// 颜色结构
RGBQUAD cColor;

// 根据每象素比特数得到此点的象素值
switch (m_lpBMIH->biBitCount)
{
case 1 :
if (1<<(7-x%8) & *(LPBYTE)(m_lpImage+GetPixelOffset(x, y)))
{
cColor.rgbBlue  = 255;
cColor.rgbGreen = 255;
cColor.rgbRed   = 255;
cColor.rgbReserved =0;
}
else
{
cColor.rgbBlue  = 0;
cColor.rgbGreen = 0;
cColor.rgbRed   = 0;
cColor.rgbReserved =0;
}
break;
case 4 :
{
int nIndex = (*(LPBYTE)(m_lpImage+GetPixelOffset(x, y)) & 
   (x%2 ? 0x0f : 0xf0)) >> (x%2 ? 0 : 4);
LPRGBQUAD pDibQuad = (LPRGBQUAD) (m_lpvColorTable) + nIndex;
cColor.rgbBlue  = pDibQuad->rgbBlue;
cColor.rgbGreen = pDibQuad->rgbGreen;
cColor.rgbRed   = pDibQuad->rgbRed;
cColor.rgbReserved =0;
}
break;
case 8 :
{
int nIndex = *(BYTE*)(m_lpImage+GetPixelOffset(x, y));
LPRGBQUAD pDibQuad = (LPRGBQUAD) (m_lpvColorTable) + nIndex;
cColor.rgbBlue  = pDibQuad->rgbBlue;
cColor.rgbGreen = pDibQuad->rgbGreen;
cColor.rgbRed   = pDibQuad->rgbRed;
cColor.rgbReserved =0;
}
break;
default:
int nIndex = *(BYTE*)(m_lpImage+GetPixelOffset(x, y));
cColor.rgbRed   = m_lpImage[nIndex];
cColor.rgbGreen = m_lpImage[nIndex + 1];
cColor.rgbBlue  = m_lpImage[nIndex + 2];
cColor.rgbReserved =0;
break;
}
这样做调试的时候a出了问题,得不到值
如何修改阿?

解决方案 »

  1.   


    int a=cColor[10].rgbBlue;//语法有问题//RGBQUAD定义
    typedef struct tagRGBQUAD { // rgbq 
        BYTE    rgbBlue; 
        BYTE    rgbGreen; 
        BYTE    rgbRed; 
        BYTE    rgbReserved; 
    } RGBQUAD;
      

  2.   

    RGBQUAD cColor;
    int a=cColor[10].rgbBlue; error C2676: binary '[' : 'struct tagRGBQUAD' does not define this operator or a conversion to a type acceptable to the predefined operator用int a=cColor.rgbBlue;即可8位图 你用的可能是指向调色板的BITMAPINFO
      

  3.   

    24位位图还有调色板吗,好像没有吧!应该直接从位图本身的数据中读取,每24位代表一个像素,其中rgb各占8位。
      

  4.   

    假设m_lpImage直接指向位图数据,估计可用下面得到:(没试过,你看对不对?)
    BYTE r = *((BYTE*)(m_lpImage+GetPixelOffset(x, y) * 3 ));
    BYTE g = *((BYTE*)(m_lpImage+GetPixelOffset(x, y) * 3 + 1));
    BYTE b = *((BYTE*)(m_lpImage+GetPixelOffset(x, y) * 3 + 2));