显示:将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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python 获取时间戳_python十个实例

    python 获取时间戳_python十个实例1、获取秒级时间戳与毫秒级时间戳、微秒级时间戳importtimeimportdatetimet=time.time()print(t)#原始时间数据print(int(t))#秒级时间戳print(int(round(t*1000)))#毫秒级时间戳print(int(round(t*1000000)))#微秒级时间戳返回1…

    2022年10月2日
    4
  • 小学语文历史重点名人以及解析大全

    小学语文历史重点名人以及解析大全【人物1】:司马光【简介】:司马光(1019~1086),北宋时期著名政治家、史学家、散文家。北宋陕州夏县涑水乡(今山西运城安邑镇东北)人,汉族。出生于河南省光山县,字君实,号迂叟,世称涑水先生。司马光自幼嗜学,尤喜《春秋左氏传》。【相关故事】司马光砸缸司马光七岁的时候稳重的就像一个大人,听到老师讲解《左氏春秋》,非常喜爱,放学之后又为家人讲他所学到的,他立即也明白了《左氏春秋》的内涵,从此手里放不下书本,甚至到了忘记了饥渴,冷热的程度。有一次,他跟小伙伴们在后院里玩耍,有个小孩爬到大

    2022年5月7日
    76
  • linux服务器,svn认证失败,配置问题,防火墙等等

    linux服务器,svn认证失败,配置问题,防火墙等等

    2021年10月13日
    77
  • 基于遗传算法的函数极值求取_遗传算法计算二元函数最大值

    基于遗传算法的函数极值求取_遗传算法计算二元函数最大值前面在《遗传算法通识》中介绍了基本原理,这里结合实例,看看遗传算法是怎样解决实际问题的。有一个函数:f(x)=x+10sin5x+7cos4xf(x)=x+10\sin5x+7\cos4x求其在区间[-10,10]之间的最大值。下面是该函数的图像:在本例中,我们可以把x作为个体的染色体,函数值f(x)作为其适应度值,适应度越大,个体越优秀,最大的适应度就是我们要求的最大值。

    2025年11月7日
    4
  • 深度神经网络总结

    深度神经网络总结深度神经网络(DeepNeuralNetworks,DNN)可以理解为有很多隐藏层的神经网络,又被称为深度前馈网络(DFN),多层感知机(Multi-Layerperceptron,MLP)。1前向传播算法1.1从感知机到神经网络感知机的模型是一个有若干输入和一个输出的模型,如下图:输出和输入之间学习到一个线性关系,得到中间输出结果:接着是一个神经元激活函数,…

    2022年6月15日
    41
  • flask表单处理_html表单的提交方法

    flask表单处理_html表单的提交方法这里介绍一下Flask表单提交相关的方法,还是以代码实例为主。首先,Flask模板中表单提交代码与我们一般写的H5表单无异,当然,Flask也提供了表单类,Flask-WTF扩展。这里只介绍常规的表单提交方法。首先是模板类:&lt;!DOCTYPEhtml&gt;&lt;htmllang="en"&gt;&lt;head&gt;&lt;metacharset="UTF-8"&g…

    2022年9月1日
    3

发表回复

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

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