OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 4602|回复: 0

opencv2.4.4在mfcpicture控件上显示图片有的可以显示,有的显示

[复制链接]
发表于 2013-6-10 16:04:52 | 显示全部楼层 |阅读模式
用mat::imread()读文件,用mat::imshow()测试正常,现在是想在vc2010 mfc 的picture控件上显示,用gdi+显示,有的可以显示,有的显示不了。不知道原因。求解决。另外:想获取mat.depth()这样的返回值,不知道如何获取通常的赋值给变量的做法会报错。代码如下:
void BitMatToWnd(CWnd* wnd, cv::Mat img, CRect *Roi)
{
    if(img.empty())
        return;
    CDC *cdc = wnd->GetDC();
    CDC MemDC;//首先定义一个显示设备对象
    CBitmap MemBitmap;//定义一个位图对象
    CRect rect, drect;
   
    wnd->GetClientRect(rect);
    Gdiplus::Bitmap bitmap(img.cols, img.rows, img.cols * img.channels(),  PixelFormat24bppRGB, (BYTE*)img.data);//根据Mat矩阵创建一个GDI+中的Bitmap位图
   
    if(Roi == NULL)
        drect = rect;
    else
        drect = *Roi;
    //随后建立与屏幕显示兼容的内存显示设备
    MemDC.CreateCompatibleDC(cdc);
    //下面建立一个与屏幕显示兼容的位图,至于位图的大小,可以用窗口的大小
    MemBitmap.CreateCompatibleBitmap(cdc, rect.Width(), rect.Height());
   
    //将位图选入到内存显示设备中
    //只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
    CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
   
    //先用背景色将位图清除干净,可以用自己应该用的颜色
    MemDC.FillSolidRect(0,0, rect.Width(), rect.Height(),RGB(255,255,255));
   
    //绘图
    Gdiplus::Graphics g(MemDC.m_hDC);
    Gdiplus::Image *ii = &bitmap;
    g.DrawImage(ii, Gdiplus::Rect(0,0,drect.Width(),drect.Height()));
    g.ReleaseHDC(MemDC.m_hDC);
   
    //将内存中的图拷贝到屏幕上进行显示
    cdc->BitBlt(0,0,drect.Width(),drect.Height(),&MemDC,0, 0,SRCCOPY);
    //绘图完成后的清理
    MemBitmap.DeleteObject();
    MemDC.DeleteDC();
    ReleaseDC(cdc);
    }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-5-11 03:55 , Processed in 0.014356 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表