MFC+VS2012+图像/视频+函数

利用vs创建mfc相对于qt会更容易上手,但是界面上会远不如其好看。
0 创建解决方案
这里写图片描述这里写图片描述
1 配置环境
添加需要使用opencv的两个文件

http://download.csdn.net/detail/songzige/9477119

将其分别添加到头文件和源文件
在….Dlg.h文件中添加几个include引用:

#include "cv.h"
#include "highgui.h"
#include "CvvImage.h"

2 界面设置

菜单,视图,工具箱,打开工具箱
一、选中Button控件-将Button从工具箱向窗体拖动,添加按钮-双击添加button的启动函数
例如读取指定文件夹下的文件:

// TODO: 在此添加控件通知处理程序代码  
    CString FilePath;   
    CFileDialog FileDlg(TRUE);   
    if (IDOK == FileDlg.DoModal())   
    {   
        //获取FileOpen对话框返回的路径名  
        FilePath = FileDlg.GetPathName();   
        //GetPathName返回的是CString类型,要经过转换为string类型才能使用imread打开图片   
        std::string pathName(FilePath.GetBuffer());   
        //读取图片   
        cv::Mat orgImg = cv::imread(pathName);   (视频也OK)
        }

二、同理,添加Picture Control控件-右击Picture控件,属性,打开控件属性窗口,其ID为IDC_STATIC(可自己随意设置),修改Type为Rectangle-将Picture控件大小调整合适,–右击添加的按钮,属性-可将Caption改为OpenImg(随意修改,中午也OK)–双击按钮,添加事件处理程序,会自动生成相对应的代码(将需要处理的代码放置在函数中)
利用Picture Control显示图片或视频:

//显示图片
            RECT win_rect;   
            ::GetClientRect(GetDlgItem(IDC_WINDOWS)->GetSafeHwnd(), &win_rect);   
            cv::Mat imgShow( abs(win_rect.top - win_rect.bottom), abs(win_rect.right - win_rect.left), CV_8UC3 );   
            resize( TestImage, imgShow, imgShow.size() );   
            //在控件上显示要用到的CImage类图片   
            ATL::CImage CI;   
            int w=imgShow.cols;//宽   
            int h=imgShow.rows;//高   
            int channels=imgShow.channels();//通道数   
            CI.Create( w, h, 8*channels); //CI像素的复制   
            uchar *pS; uchar *pImg=(uchar *)CI.GetBits();//得到CImage数据区地址   
            int step=CI.GetPitch();   
            for(int i=0;i<h;i++)   
            {   
                pS=imgShow.ptr<uchar>(i);  
                for(int j=0;j<w;j++)   
                {   
                    for(int k=0;k<3;k++)   
                        *(pImg+i*step+j*3+k)=pS[j*3+k]; //注意到这里的step不用乘以3   
                }   
            }   
            //在控件显示图片   
            HDC dc ;   
            dc = ::GetDC(GetDlgItem(IDC_WINDOWS)->GetSafeHwnd());   
            CI.Draw( dc, 0, 0 );   
            ::ReleaseDC( GetDlgItem(IDC_WINDOWS)->GetSafeHwnd(), dc);   
            CI.Destroy(); 

三、添加输出框
类似于这个样子
这里写图片描述
这里面涉及几个点,首先实现代码:

        string SS_String = SS.str();//SS为一个stringstream SS(stringstream::in | stringstream::out);用来存东西的
        cstr += SS_String.c_str();
        GetDlgItem(IDC_SHOW_OUTPUT)->SetWindowText(cstr);
        m_recvshw.LineScroll(m_recvshw.GetLineCount());//m_recvshw为该编辑框的成员变量(也就是control类型的变量)   ,右键按钮-添加变量-设置变量名(这里是m_recvshw)
        cstr += _T("\r\n");//换行

滚动及自动换行:
1.新建一个编辑框控件(Edit Control),将其多行(Multiline)前面打勾(属性设置为True),Auto HScroll前面的勾去掉(属性设置False),这样就可以实现每一行填满后自动换行了。

2.再将垂直滚动条(Vetrical Scroll)前面打勾(属性设置为True),当输入或显示超过编辑框的大小后就会出现垂直滚动条。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值