StretchDIBits显示8位图有关问题
StretchDIBits显示8位图问题
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.
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.