StretchDIBits显示8位图有关问题

StretchDIBits显示8位图问题

                BITMAPINFO m_bmpMapInfo;
m_bmpMapInfo.bmiHeader.biBitCount = 8;
m_bmpMapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
m_bmpMapInfo.bmiHeader.biPlanes = 1;
m_bmpMapInfo.bmiHeader.biWidth = pMDlg->m_KYDCamera.iWidthTemp;
m_bmpMapInfo.bmiHeader.biHeight = pMDlg->m_KYDCamera.iHeightTemp;
m_bmpMapInfo.bmiHeader.biSizeImage = pMDlg->m_KYDCamera.iWidthTemp*pMDlg->m_KYDCamera.iHeightTemp;
m_bmpMapInfo.bmiHeader.biCompression = BI_RGB;
m_bmpMapInfo.bmiHeader.biClrUsed = 0;
m_bmpMapInfo.bmiHeader.biXPelsPerMeter = 0;
m_bmpMapInfo.bmiHeader.biYPelsPerMeter = 0;
m_bmpMapInfo.bmiHeader.biClrImportant = 0;

m_bmpMapInfo.bmiColors[0].rgbBlue=0;
m_bmpMapInfo.bmiColors[0].rgbGreen=0;
m_bmpMapInfo.bmiColors[0].rgbRed=0;
m_bmpMapInfo.bmiColors[0].rgbReserved=0;

CDC *pDC = m_stcCutImg.GetWindowDC();
CRect rect;
m_stcCutImg.GetWindowRect(&rect);

SetStretchBltMode(pDC->m_hDC,HALFTONE);
CKYDSMTDlg *pMDlg = (CKYDSMTDlg*)AfxGetMainWnd();
StretchDIBits(pDC->m_hDC, // 设备环境句柄
0,                 //目标X坐标
0,                  // 目标Y坐标
rect.Width(),            // 目标宽度
rect.Height(),           // 目标高度
0,                // 源X坐标
0,                 // 源Y坐标
m_bmpMapInfo.bmiHeader.biWidth,           // 源宽度
m_bmpMapInfo.bmiHeader.biHeight,          // 源高度
pMDlg->m_KYDCamera.pTempImg,
&m_bmpMapInfo,         // 指向位图信息结构的指针
DIB_RGB_COLORS,                 // 使用的颜色数目
SRCCOPY); 

ReleaseDC(pDC);

pTempImg是相机采集回来的图像数据指针,没有问题,可以保存成文件。
我怀疑是m_bmpMapInfo数据填充问题,没找到原因
显示的时候,花屏
------解决方案--------------------
明显是调色板问题。 
------解决方案--------------------
引用:

                BITMAPINFO m_bmpMapInfo;
m_bmpMapInfo.bmiHeader.biBitCount = 8;
m_bmpMapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
m_bmpMapInfo.bmiHeader.biPlanes = 1;
m_bmpMapInfo.bmiHeader.biWidth = pMDlg->m_KYDCamera.iWidthTemp;
m_bmpMapInfo.bmiHeader.biHeight = pMDlg->m_KYDCamera.iHeightTemp;
m_bmpMapInfo.bmiHeader.biSizeImage = pMDlg->m_KYDCamera.iWidthTemp*pMDlg->m_KYDCamera.iHeightTemp;
m_bmpMapInfo.bmiHeader.biCompression = BI_RGB;
m_bmpMapInfo.bmiHeader.biClrUsed = 0;
m_bmpMapInfo.bmiHeader.biXPelsPerMeter = 0;
m_bmpMapInfo.bmiHeader.biYPelsPerMeter = 0;
m_bmpMapInfo.bmiHeader.biClrImportant = 0;

m_bmpMapInfo.bmiColors[0].rgbBlue=0;
m_bmpMapInfo.bmiColors[0].rgbGreen=0;
m_bmpMapInfo.bmiColors[0].rgbRed=0;
m_bmpMapInfo.bmiColors[0].rgbReserved=0;

CDC *pDC = m_stcCutImg.GetWindowDC();
CRect rect;
m_stcCutImg.GetWindowRect(&rect);

SetStretchBltMode(pDC->m_hDC,HALFTONE);
CKYDSMTDlg *pMDlg = (CKYDSMTDlg*)AfxGetMainWnd();
StretchDIBits(pDC->m_hDC, // 设备环境句柄
0,                 //目标X坐标
0,                  // 目标Y坐标
rect.Width(),            // 目标宽度
rect.Height(),           // 目标高度
0,                // 源X坐标
0,                 // 源Y坐标
m_bmpMapInfo.bmiHeader.biWidth,           // 源宽度
m_bmpMapInfo.bmiHeader.biHeight,          // 源高度
pMDlg->m_KYDCamera.pTempImg,
&m_bmpMapInfo,         // 指向位图信息结构的指针
DIB_RGB_COLORS,                 // 使用的颜色数目
SRCCOPY); 

ReleaseDC(pDC);

pTempImg是相机采集回来的图像数据指针,没有问题,可以保存成文件。
我怀疑是m_bmpMapInfo数据填充问题,没找到原因
显示的时候,花屏


8位位图应该填充调色板吧
------解决方案--------------------
8 The bitmap has a maximum of 256 colors, and the bmiColors member contains up to 256 entries. In this case, each byte in the array represents a single pixel.