vfw编程 得到了每幅图像的数据区 将24位位图转换成灰度图 不会!!!!!
在回调函数FrameCallBack中很容易得到每幅图像的数据区 可是是24位的位图 怎样转换为灰度图呢? 从csdn以往的帖子里找了很多方法 都不会用 有没有不用句柄 调色板 就可以转化过去的? 给个例子 多谢!!!
这个是我找到的一个并自己改了改 改错了 哪位看看还可以用不
BOOL Bmp2Gry(LPBYTE CaptureData, LPBYTE *lpGrayData)
{
CClientDC dc(CWnd::GetDesktopWindow());
RGBQUAD rgb[256];
CBitmap bitmap;
bitmap.SetBitmapBits(320*240*3,CaptureData);
CDC memdc;
memdc.CreateCompatibleDC(&dc);
memdc.SelectObject( &bitmap );
::GetDIBColorTable( memdc, 0, 256 , rgb );
int nBmpSize = 0;
nBmpSize = ((((320 * 24) + 31) & ~31) >> 3) * 240;
if(*lpGrayData == NULL)
*lpGrayData = new BYTE[nBmpSize];
memset(*lpGrayData, 0, nBmpSize);
for(int i = 0; i < nBmpSize; i ++)
{
int nIndex = CaptureData[i];
double r = (double)(rgb[nIndex].rgbRed);
double g = (double)(rgb[nIndex].rgbGreen);
double b = (double)(rgb[nIndex].rgbBlue);
BYTE c = (BYTE)(r*0.29900 + g*0.58700 + b*0.11400);
int pos = ((240 - (i/320) - 1)*320) + (i % 320);
(*lpGrayData)[pos] = c;
}
delete []CaptureData;
CaptureData = NULL;
return TRUE;
}
多谢!!