一个关于灰度图的问题......
我想对图像进行灰度化,然后将图像输出,但是输出的图像并没有灰度化,而且图像的颜色改变了,不是原图的颜色.......
附上代码:
void CRecView::OnRec()
{
// TODO: 在此添加命令处理程序代码
//获取图像的宽度和高度
CSize sizeRec;
sizeRec=m_pDibRec->GetDimensions();
//获取图像存储的高度和宽度
CSize sizeSaveRec;
sizeSaveRec=m_pDibRec->GetDibSaveDim();
LPBYTE lpSrc, lpDst;
lpDst = new BYTE[sizeRec.cx*sizeRec.cy];
//获取图像的数据区
lpSrc=(LPBYTE)m_pDibRec->m_lpImage;
memcpy(lpDst,lpSrc, sizeRec.cx*sizeRec.cy);
RGBQUAD * pRGBPalette;
LPBYTE lpBuffer=m_pDibRec->m_lpImage;
pRGBPalette=(RGBQUAD*)&lpBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)];
BYTE byteMap[256];
for (int i=0;i<256;i++)
{
byteMap[i]=(BYTE)pRGBPalette->rgbRed*0.299+(BYTE)pRGBPalette->rgbGreen*0.587+(BYTE)pRGBPalette->rgbBlue*0.114;
pRGBPalette->rgbRed=i;
pRGBPalette->rgbGreen=i;
pRGBPalette->rgbBlue=i;
pRGBPalette->rgbReserved=0;
}
for (int i=0;i<sizeRec.cy;i++)
{
for (int j=0;j<sizeRec.cx;j++)
{
BYTE temp=lpSrc[sizeRec.cx*i+j];
lpDst[sizeRec.cx*i+j]=byteMap[temp];
}
}
memcpy(lpSrc, lpDst, sizeRec.cx*sizeRec.cy);
Invalidate();
}