显示:将Mat图片居中显示到MFC的picture控件上(通过StretchDIBits)

显示:将Mat图片居中显示到MFC的picture控件上(通过StretchDIBits)BOOLCXXXDlg ShowMat Matimage if image empty returnFALSE CRectrect intwidth height BITMAPINFObi BITMAPINFOHE bmiHeader width image cols height image rows

BOOL CXXXDlg::ShowMat(Mat image) { if (image.empty()) return FALSE; CRect rect; int width, height; BITMAPINFO bitmapInfo; BITMAPINFOHEADER* bmiHeader; width = image.cols; height = image.rows; if (width % 4) width = (width + 3) / 4 * 4; cv::Size winSize(width, height); cv::Mat cvImgTmp(winSize, CV_8UC3); if (image.size() != winSize) cv::resize(image, cvImgTmp, winSize); else cvImgTmp = image.clone(); if (cvImgTmp.channels()==1) cvtColor(cvImgTmp, cvImgTmp, CV_GRAY2BGR); GetDlgItem(IDC_STATIC_SHOW_MODE)->GetClientRect(&rect); bmiHeader = &bitmapInfo.bmiHeader; bmiHeader->biSize = sizeof(BITMAPINFOHEADER); bmiHeader->biWidth = cvImgTmp.cols; bmiHeader->biHeight = -cvImgTmp.rows; bmiHeader->biPlanes = 1; bmiHeader->biBitCount = 24; bmiHeader->biCompression = BI_RGB; bitmapInfo.bmiHeader.biSizeImage = 0; bmiHeader->biXPelsPerMeter = GetSystemMetrics(SM_CXSCREEN); bmiHeader->biYPelsPerMeter = GetSystemMetrics(SM_CYSCREEN); bmiHeader->biClrUsed = 0; bmiHeader->biClrImportant = 0; /*使图片在控件中居中全部显示*/ int nWindowW = rect.Width(); //获取窗口宽度 int nWindowH = rect.Height(); //获取窗口高度 int nImageW = cvImgTmp.cols; //获取图片宽度 int nImageH = cvImgTmp.rows; //获取图片高度 float fRatioW = (float)nWindowW / nImageW; float fRatioH = (float)nWindowH / nImageH; int nBeginW , nBeginH, nWeight, nHeight; if (fRatioW < fRatioH) { nBeginW = 0; nBeginH = (int)(nWindowH - (nImageH*fRatioW)) / 2; nWeight = nWindowW; nHeight = (int)(nImageH * fRatioW); } else { nBeginW = (int)(nWindowW - (nImageW*fRatioH)) / 2; nBeginH = 0; nWeight = (int)(nImageW * fRatioH); nHeight = nWindowH; } GetDlgItem(IDC_STATIC_SHOW_MODE)->GetDC()->FillSolidRect(0, 0, nWindowW, nWindowH, COLORREF(0)); GetDlgItem(IDC_STATIC_SHOW_MODE)->GetDC()->SetStretchBltMode(COLORONCOLOR); StretchDIBits(GetDlgItem(IDC_STATIC_SHOW_MODE)->GetDC()->GetSafeHdc() , nBeginW, nBeginH, nWeight, nHeight , 0, 0, nImageW, nImageH, cvImgTmp.data, &bitmapInfo, DIB_RGB_COLORS, SRCCOPY); return TRUE; }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232969.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 初步STL集装箱Vector

    初步STL集装箱Vector

    2022年1月4日
    131
  • git 分支管理 推送本地分支到远程分支等

    git 分支管理 推送本地分支到远程分支等

    2021年10月23日
    50
  • activity 工作流程引擎-如何画流程图

    activity 工作流程引擎-如何画流程图前言:activity工作流引擎是当前最流行的工作流,最近公司一直在用这个感觉还是很好用的,学习过程中也有不少的坑所以简单记录一下相关知识的学习过程吧如何画流程图,这里使用浏览器端的一个工具和eclipse里面操作都差不多吧1.流程图里面的节点,如开始,子流程等都是通过拖拽的方式加载的2.一个节点通过点击即可选择下一个节点事件3.如果一个节点出现分支,或者判断的情况可以在流程线上设置…

    2022年7月27日
    26
  • pytest指定用例_文件夹排列顺序自定义

    pytest指定用例_文件夹排列顺序自定义前言测试用例在设计的时候,我们一般要求不要有先后顺序,用例是可以打乱了执行的,这样才能达到测试的效果.有些同学在写用例的时候,用例写了先后顺序,有先后顺序后,后面还会有新的问题(如:上个用例返回

    2022年7月29日
    10
  • 屏幕适配 autosize

    屏幕适配 autosizeAndroidManifest<meta-dataandroid:name=”design_width_in_dp”android:value=”400″/><meta-dataandroid:name=”design_height_in_dp”android:value=”800″/>build(APP)implementa

    2022年5月31日
    31
  • Mysql经典练习题50题「建议收藏」

    Mysql经典练习题50题「建议收藏」网上关于这套练习题较多使用的是比较老的mysql版本,我使用的是Serverversion:8.0.15MySQL练习数据数据表–1.学生表Student(SId,Sname,Sage,Ssex)–SId学生编号,Sname学生姓名,Sage出生年月,Ssex学生性别–2.课程表Course(CId,Cname,TId)–CId–课程编号,Cna…

    2022年9月18日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号