不通过 ConvertBayer2RGB 用 CDC 绘图函数 直接采用 m_pRawBuffer 就可以显示灰度图像,主要代码如下:
不知对你是否有用,^_^
1.初始化BITMAPINFO
{
//m_pBmpInfo即指向m_chBmpBuf缓冲区,用户可以自己分配BTIMAPINFO缓冲区
m_pBmpInfo = (BITMAPINFO *)m_chBmpBuf;
// 初始化BITMAPINFO 结构,此结构在保存bmp文件、显示采集图像时使用
m_pBmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
// 图像宽度,一般为输出窗口宽度
m_pBmpInfo->bmiHeader.biWidth = m_OutSizeX;
// 图像宽度,一般为输出窗口高度
m_pBmpInfo->bmiHeader.biHeight = m_OutSizeY;
/*
* 以下设置一般相同,
* 对于低于8位的位图,还应设置相应的位图调色板
*/
m_pBmpInfo->bmiHeader.biPlanes = 1;
m_pBmpInfo->bmiHeader.biBitCount = 8;//8位灰度图像
m_pBmpInfo->bmiHeader.biCompression = BI_RGB;
m_pBmpInfo->bmiHeader.biSizeImage = 0;
m_pBmpInfo->bmiHeader.biXPelsPerMeter = 0;
m_pBmpInfo->bmiHeader.biYPelsPerMeter = 0;
m_pBmpInfo->bmiHeader.biClrUsed = 0;
m_pBmpInfo->bmiHeader.biClrImportant = 0;
//以下内容一定要有,否则显示图像不正常
for(i=0; i<256; i++)
{
m_pBmpInfo->bmiColors[i].rgbBlue = i;
m_pBmpInfo->bmiColors[i].rgbGreen = i;
m_pBmpInfo->bmiColors[i].rgbRed = i;
m_pBmpInfo->bmiColors[i].rgbReserved = 0;
}
/*
* 分配原始图像缓冲区,一般用来存储采集图像原始数据
* 一般图像缓冲区大小由输出窗口大小和视频格式确定。
*/
m_pRawBuffer = new BYTE[m_nMaxWidth * m_nMaxHeight];
if(m_pRawBuffer == NULL)
return FALSE;
return TRUE;
}
2.直接用m_pRawBuffer显示图像
::StretchDIBits(dc, 0,0,m_OutSizeX, m_OutSizeY, 0,0,m_OutSizeX, m_OutSizeY,
m_pRawBuffer,m_pBmpInfo, DIB_RGB_COLORS,SRCCOPY);
注:m_OutSizeX, m_OutSizeY 为输出显示图像大小。
[此贴子已经被作者于2007-8-8 18:29:11编辑过]