PICTURE控件显示图片或视频的方法

来源:互联网 发布:时时彩后二计划软件 编辑:程序博客网 时间:2024/05/13 00:38

来自链接:http://www.zhihu.com/question/29611790/answer/45068617

是实测两种都可以,偷笑偷笑偷笑本人更喜欢第二种。
void Ckinect2Dlg::drawcvmat(Mat m_cvImg, UINT ID)
{
Mat img;
CRect rect;
GetDlgItem(ID)->GetClientRect(&rect);
Rect dst(rect.left,rect.top,rect.right,rect.bottom);
resize(m_cvImg,img,Size(rect.Width(),rect.Height()));


unsigned int m_buffer[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256];
BITMAPINFO* m_bmi = (BITMAPINFO*) m_buffer;
BITMAPINFOHEADER* m_bmih = &(m_bmi->bmiHeader);
memset(m_bmih, 0, sizeof(*m_bmih));
m_bmih->biSize = sizeof(BITMAPINFOHEADER);
m_bmih->biWidth = img.cols;
m_bmih->biHeight = -img.rows;           // 在自下而上的位图中 高度为负
m_bmih->biPlanes = 1;
m_bmih->biCompression = BI_RGB;
m_bmih->biBitCount =8* img.channels();

CDC *pDC = GetDlgItem(ID)->GetDC();
::StretchDIBits(
pDC->GetSafeHdc(),
0, 0, rect.Width(), rect.Height(),
0, 0, img.cols, img.rows,
img.data,
(BITMAPINFO*) m_bmi,
DIB_RGB_COLORS,
SRCCOPY
);
ReleaseDC(pDC); 
}

另外一个方法,也可以把OpenCV的窗口添加到PictureControl里面,这样你可以继续使用OpenCV的setMouseCallback直接对PictureControl进行鼠标操作。
首先在你的OnInit函数中添加如下
namedWindow("view", WINDOW_AUTOSIZE);HWND hWnd = (HWND) cvGetWindowHandle("view");HWND hParent = ::GetParent(hWnd);::SetParent(hWnd, GetDlgItem(IDC_STATIC_CV)->m_hWnd);::ShowWindow(hParent, SW_HIDE);
上面就是打开一个名为view的OpenCV窗口,并将其放置到一个ID为IDC_STATIC_CV的PictureControl里面,这个控件的类型需要是rectangle。当你在需要显示某图片的时候,就像在OpenCV里面显示一样就可以了。
imshow("view", mat);
0 0
原创粉丝点击