在MFC中将OpenCV的Mat矩阵绘制到Picture Control控件中的方法
2019-04-15 16:22发布
生成海报
转载:
https://blog.csdn.net/andylanzhiyong/article/details/83620031
需要将此方法定义成类成员
void CXxxDlg::DrawMat2PicCtrl(cv::Mat src, int nID) //需要定义成Dlg的成员函数
{
CRect rect;
GetDlgItem(nID)->GetClientRect(&rect); // 获取图片控件矩形框
resize(src, src, cv::Size(rect.Width(), rect.Height())); // 缩放Mat,以适应图片控件大小
// 转换格式 ,便于获取BITMAPINFO
switch (src.channels())
{
case 1:
cvtColor(src, src, CV_GRAY2BGRA); // GRAY单通道
break;
case 3:
cvtColor(src, src, CV_BGR2BGRA); // BGR三通道
break;
default:
break;
}
int nPixelBytes = src.channels() * (src.depth() + 1); // 计算一个像素多少个字节
// 制作bitmapinfo(数据头)
BITMAPINFO bitInfo;
bitInfo.bmiHeader.biBitCount = 8 * nPixelBytes;
bitInfo.bmiHeader.biWidth = src.cols;
bitInfo.bmiHeader.biHeight = -src.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(nID)->GetDC(); //获取图片控件DC
//绘图
StretchDIBits(
pDC->GetSafeHdc(),
0, 0, rect.Width(), rect.Height(),
0, 0, src.cols, src.rows,
src.data,
&bitInfo,
DIB_RGB_COLORS,
SRCCOPY
);
ReleaseDC(pDC); //释放DC
}
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮