cv::Mat src=cv::imread(".....");
CRect rect;
GetDlgItem(IDC_STATIC)->GetClientRect(&rect); // 获取图片控件矩形框
cv::Size dsize = cv::Size(rect.Width(), rect.Height());
cv::Mat img = cv::Mat(dsize, CV_8UC3);
cv::resize(src, img, dsize);
// 转换格式 ,便于获取BITMAPINFO
switch (img.channels())
{
case 1:
cv::cvtColor(img, img, CV_GRAY2BGRA); // GRAY单通道
break;
case 3:
cv::cvtColor(img, img, CV_BGR2BGRA); // BGR三通道
break;
default:
break;
}
int pixelBytes = img.channels()*(img.depth() + 1); // 计算一个像素多少个字节
// 制作bitmapinfo(数据头)
BITMAPINFO bitInfo;
bitInfo.bmiHeader.biBitCount = 8 * pixelBytes;
bitInfo.bmiHeader.biWidth = img.cols;
bitInfo.bmiHeader.biHeight = -img.rows; //注意"-"号(正数时倒着绘制)
bitInfo.bmiHeader.biPlanes = 1;
bitInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bitInfo.bmiHeader.biCompression = BI_RGB;
bitInfo.bmiHeader.biClrImportant = 0;
bitInfo.bmiHeader.biClrUsed = 0;
bitInfo.bmiHeader.biSizeImage = 0;
bitInfo.bmiHeader.biXPelsPerMeter = 0;
bitInfo.bmiHeader.biYPelsPerMeter = 0;
CDC *pDC = GetDlgItem(IDC_STATIC)->GetDC(); //获取图片控件DC
//绘图
::StretchDIBits(
pDC->GetSafeHdc(),
0, 0, rect.Width(), rect.Height(),
0, 0, img.cols, img.rows,
img.data,
&bitInfo,
DIB_RGB_COLORS,
SRCCOPY
);
ReleaseDC(pDC); //释放DC
MFC图像显示,防止屏幕花屏.