精华内容
下载资源
问答
  • MFC显示图片

    万次阅读 2017-01-12 11:20:12
    其实使用MFC显示图片的方法各种各样,但是还是有些同学不知道怎样显示.以前在《数字图像处理》课程中完成的软件都是基于单文档的程序,这里介绍两种在对话框picthre控件中显示BMP图片的最简单基础的方法.   ~~方法...

    最近有同学问我如何实现MFC基于对话框在图片控件中加载图片?其实使用MFC显示图片的方法各种各样,但是还是有些同学不知道怎样显示.以前在《数字图像处理》课程中完成的软件都是基于单文档的程序,这里介绍两种在对话框picthre控件中显示BMP图片的最简单基础的方法. 
            ~~方法可能并不完美,高手忽略,但是提供一种能运行的方法,希望对刚接触这方面知识的同学有所帮助.可能你觉得文章过于简单或者有些过于详细叙述(点到即可我并不反对),但也为哪些入门同学想想,当初自己也是一头雾水. 
    一.静态显示bmp图片 
            
    1. 创建MFC基于对话框程序,添加一个button1和picture控件,其中“资源视图”中编辑picture控件ID为:IDC_STATIC_PIC. 
            2.在"资源视图"(如果没有,视图中可调用出来)中右键鼠标Dialog处,选择"添加资源".在对话框中选择Bitmap,点击"导入",选择本地bmp图片( 建议位图放置在res文件夹中) .它会添加一张IDB_BITMAP1图片 . 

            3.点击button1按钮,在生成的函数中添加如下代码:

    void CShowBmpDlg::OnBnClickedButton1()
    {
    	//从资源中加载图片
    	CBitmap bitmap;
    	//加载指定位图资源 Bmp图片ID
    	bitmap.LoadBitmap(IDB_BITMAP1);  
    	//获取对话框上的句柄 图片控件ID
     	CStatic *p=(CStatic *)GetDlgItem(IDC_STATIC_PIC);  
    	//设置静态控件窗口风格为位图居中显示
    	p->ModifyStyle(0xf,SS_BITMAP|SS_CENTERIMAGE); 
    	//将图片设置到Picture控件上
    	p->SetBitmap(bitmap); 
    }

            4.运行结果如下图所示: 
        
            5.总结 
            通过上面的截图我们可以发现:该方法是通过资源ID来获取BMP图片的,所以我称之为静态的方法.同时,可能你见到过在添加Picture控件时修改其Type为Bitmap在通过image选择ID的方法.但这里是通过代码来实现的,而且ModifyStyle函数的功能就相当于设置其属性. 
            ~~上图很明显的反应了它显示图片时,如果图片尺寸超过控件size只能显示部分图片.方法我只叙述到这,需要你自己去尝试.曾经在单文档中显示BMP图片时,是通过重载onpaint事件,GetClientRect获取尺寸调用StretchBlt(图像可拉伸压缩)实现(参照 前文 ). 
            其实LoadBitmap函数已被LoadImage替代,该函数用于装载图标\光标\位图.如下代码所示 可以实现同样的效果 ,其中Rockies.bmp为本地文件,与程序相同文件夹.

    void CShowBmpDlg::OnBnClickedButton1()
    {
    	//获取对话框上图片控件的句柄
    	CStatic* pWnd = (CStatic*)GetDlgItem(IDC_STATIC_PIC); 
    	//设置静态控件窗口风格为位图居中显示
    	pWnd->ModifyStyle(0xf,SS_BITMAP|SS_CENTERIMAGE);
    	//显示图片
    	pWnd->SetBitmap((HBITMAP)::LoadImage(NULL,
    		_T("Rockies.bmp"),  //资源号或本地文件名
    		IMAGE_BITMAP,       //装载位图 IMAGE_CURSOR光标 IMAGE_ICON图标
            0,                  //宽度 0为默认大小
            0,                  //高度 像素为单位
            LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE));
    }

    二.动态加载bmp图片 
            
    动态添加的方法一样,只是添加代码如下(这结合我以前的代码完成).主要的步骤是:
            1.先定义打开文件对话框,通过它获取bmp图片,其中dlg.DoMal()==IDOK表示按下确认按钮,实现后面操作.如果你学过C#就会发现它的OpenFileDialog控件与这个有些类似. 

            2.然后,获取读取文件的路径和后缀,确保其为bmp时执行读取图片信息,在" 2.MFC-bmp图片读取保存 "中,我曾详细讲述过如何读取bmp图片,这里也是二进制读取文件,读取其文件头(BITMAPFILEHEADER)、信息头(BITMAPINFOHEADER)、获取其位图数据. 
            3.最后显示图像到Picture控件中,并通过GetClientRect函数获取矩形区域,显示图像.

    void CShowBmpDlg::OnBnClickedButton1()
    {
    	//打开文件 定义四种格式的文件bmp gif jpg tiff
    	CString filter;
    	filter="所有文件(*.bmp,*.jpg,*.gif,*tiff)|*.bmp;*.jpg;*.gif;*.tiff| BMP(*.bmp)|*.bmp| JPG(*.jpg)|*.jpg| GIF(*.gif)|*.gif| TIFF(*.tiff)|*.tiff||";
    	CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,filter,NULL);          
    
    	//按下确定按钮 dlg.DoModal() 函数显示对话框
    	if( dlg.DoModal() == IDOK )
    	{
    		//打开对话框获取图像信息
    		CString BmpName = dlg.GetPathName();     //获取文件路径名   如D:\pic\abc.bmp
    		CString EntName = dlg.GetFileExt();      //获取文件扩展名
    		EntName.MakeLower();                     //将文件扩展名转换为一个小写字符
    
    		if(EntName.Compare(_T("bmp")) == 0)
    		{
    			//定义变量存储图片信息
    			BITMAPINFO *pBmpInfo;       //记录图像细节
    			BYTE *pBmpData;             //图像数据
    			BITMAPFILEHEADER bmpHeader; //文件头
    			BITMAPINFOHEADER bmpInfo;   //信息头
    			CFile bmpFile;              //记录打开文件
    
    			//以只读的方式打开文件 读取bmp图片各部分 bmp文件头 信息 数据
    			if(!bmpFile.Open(BmpName, CFile::modeRead|CFile::typeBinary)) 
    				return;
    			if (bmpFile.Read(&bmpHeader,sizeof(BITMAPFILEHEADER)) != sizeof(BITMAPFILEHEADER))
    				return;
    			if (bmpFile.Read(&bmpInfo,sizeof(BITMAPINFOHEADER)) != sizeof(BITMAPINFOHEADER))
    				return;
    			pBmpInfo = (BITMAPINFO *)new char[sizeof(BITMAPINFOHEADER)];
    			//为图像数据申请空间
    			memcpy(pBmpInfo,&bmpInfo,sizeof(BITMAPINFOHEADER));
    			DWORD dataBytes = bmpHeader.bfSize - bmpHeader.bfOffBits;
    			pBmpData = (BYTE*)new char[dataBytes];
    			bmpFile.Read(pBmpData,dataBytes);
    			bmpFile.Close();
    
    			//显示图像
    			CWnd *pWnd=GetDlgItem(IDC_STATIC_PIC); //获得pictrue控件窗口的句柄
    			CRect rect;
    			pWnd->GetClientRect(&rect); //获得pictrue控件所在的矩形区域
    			CDC *pDC=pWnd->GetDC(); //获得pictrue控件的DC
    			pDC->SetStretchBltMode(COLORONCOLOR);
    			StretchDIBits(pDC->GetSafeHdc(),0,0,rect.Width(),rect.Height(),0,0,
    				bmpInfo.biWidth,bmpInfo.biHeight,pBmpData,pBmpInfo,DIB_RGB_COLORS,SRCCOPY);
    		}
    	}
    }

            运行程序显示结果如下图所示,点击按钮打开图片,显示图片. 
     
            总结:通过这个程序你可以很明显的看到动态加载图片由于是通过获取picture控件矩形来显示图的,图像被拉伸了.而且代码很好的反应了如何获取bmp图像的方法.通过静态的和动态的两种方法讲述. 
            ~~最后希望该文章对大家有所帮助,如果文章中有错误或不足之处,还请海涵. 
            (By:Eastmount 2014-5-21 夜2点半 原创CSDN http://blog.csdn.net/eastmount/
            PS:《数字图像处理》课程希望大家也可以学习下,你可以自己完成一个软件,你将对图像有更深的认识.以前我们要求实现的功能就包括:图像载入保存、采样量化、直方图显示、线性和非线性变换(对比度拉伸、图像均衡化)、几何运算(最近邻差值和双线性差值)、几何变换(平移、反转、旋转)、图像增强(平滑、锐化Laplacian等各种算子)、边缘检测、图像编码压缩(Huffman编码和游程编码)、图像分割复原、二值图像细化等功能.记得最蛋疼的是DICOM医学图像在Android显示与处理花了很长时间才完成的.

    展开全文
  • MFC 显示图像 图像处理(网上找来的 很不错)
  • MFC显示图片(C++)

    2011-04-01 20:44:21
    MFC显示图片,支持BMP、jpg等图片格式
  • MFC 显示图像 (基础)opencv vs2010
  • mfc 显示图片,鼠标截取一部分会显示在另一个控件上
  • opencv3.X + MFC显示图片

    千次阅读 2018-06-14 09:52:48
    目前网络上,使用opencv和MFC显示图片的方法大致分为以下几种: 1:将opencv的显示对话框嵌入到MFC窗口 2:使用CvvImage类显示图片 3:自己写代码将Mat结构转换为CImage结构 方法1过于取巧,缺陷明显。...

     

     

    目前网络上,使用opencv和MFC显示图片的方法大致分为以下几种:

     

     1:将opencv的显示对话框嵌入到MFC窗口

    2:使用CvvImage类显示图片

     

    3:自己写代码将Mat结构转换为CImage结构

     

     

    方法1过于取巧,缺陷明显。方法2需要将opencv自2.x起就弃用的CvvImage类导入工程。方法3比较复杂,看他们的代码好像还要循环拷贝图像数据。

     

     

     

     

     

    今天给大家介绍另外一种方法,是用google在国外网站上搜到的,整理了一下供大家参考。

    opencv的环境配置大家自己搜下就行了。IDC_STATIC_IMAGE是Picture Control的控件ID

    void CCircleRecognitionDlg::OnPaint()
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // device context for painting
    
    		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
    		// Center icon in client rectangle
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// Draw the icon
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialogEx::OnPaint();
    
    		using namespace cv;
    
    		CRect rect;
    		int width, height;
    		BITMAPINFO bitmapInfo;
    		BITMAPINFOHEADER* bmiHeader;
    		Mat image = imread("D:\\image\\Debug\\01.bmp");
    
    		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();
    
    		GetDlgItem(IDC_STATIC_IMAGE)->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;
    
    		StretchDIBits(GetDlgItem(IDC_STATIC_IMAGE)->GetDC()->GetSafeHdc()
    			, 0, 0, std::min(rect.Width(), rect.Height()), std::min(rect.Width(), rect.Height())
    			, 0, 0, cvImgTmp.cols, cvImgTmp.rows,
    			cvImgTmp.data, &bitmapInfo, DIB_RGB_COLORS, SRCCOPY);
    	}
    }

     

     

    

    展开全文
  • 【c++】MFC显示图片

    千次阅读 2014-12-01 17:02:38
    MFC显示图片,动态链接了Opencv库,显示用了drawImage   环境VS2010.新建MFC工程配置好opencv动态链接库,拖入Edit control 控件,进行图片显示。 注意修改Edit control 控件的两个属性:Read Only:设为True;...

    MFC显示图片,动态链接了Opencv库,显示用了drawImage

     

    环境VS2010.新建MFC工程配置好opencv动态链接库,拖入Edit control 控件,进行图片显示。

    注意修改Edit control 控件的两个属性:Read Only:设为True;Visible:设为False,否则,鼠标移动到图片上时,图片不能显示。

    资源链接:http://download.csdn.net/detail/u010141025/8213197

    展开全文
  • OpenCV+MFC 显示图像

    2016-10-14 10:14:30
    原因:opencv2.x以上版本已经不支持CvvImage类,而MFC picture控件使用的是Image*类,不支持Mat; 三、插入控件:button、picture type属性: Frame:显示一个无填充的矩形框 Rectangle:显示一个填

    一、新建TEST7项目
    二、配置OpenCV链接库,下载并添加CvvImage.h和CvvImage.cpp文件
    原因:opencv2.x以上版本已经不支持CvvImage类,而MFC picture控件使用的是Image*类,不支持Mat;
    添加文件
    三、插入控件:button、picture
    BUTTON控件属性
    PICTURE控件属性
    type属性:

    • Frame:显示一个无填充的矩形框
    • Rectangle:显示一个填充的矩形框,矩形颜色可通过Color 属性的下拉列表设定
    • Icon:显示一个图标(Icon)
    • Bitmap:显示一个位图(Bitmap)
    • Owner Draw:自绘
    • Enhanced Metafile:显示一个加强的元数据文件(Metafile)
    • Etched Horz:显示一条横分割线
    • Etched Vert:显示一条竖分割线

    四、为控件添加消息处理函数
    添加事件处理程序
    弹出事件处理向导
    五、添加代码
    在主框架头文件“TEST7Dlg.h”中添加头文件:

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

    在主框架头文件“TEST7Dlg.h”中添加成员定义、成员函数声明DrawPicToHDC:

        CRect rect;     //位置矩形
        CStatic* pStc; //标识图像显示的Picture控件
        CDC* pDC;      //视频显示控件设备上下文
        HDC hDC;       //视频显示控件设备句柄
        CvCapture* capture; //视频获取结构
        CvvImage cimg;
        //添加成员函数声明DrawPicToHDC
        void DrawPicToHDC(IplImage *img, UINT ID); 
    

    在主框架实现文件“TEST7Dlg.cpp”中添加函数实现代码:

    • 构造函数中初始化:
    CTEST7Dlg::CTEST7Dlg(CWnd* pParent /*=NULL*/)
        : CDialogEx(CTEST7Dlg::IDD, pParent)
    {
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    
        pStc=NULL;
        pDC=NULL;
        capture=NULL;
    }
    • 成员函数DrawPicToHDC的实现:
    void CTEST7Dlg::DrawPicToHDC(IplImage *img, UINT ID)
    {
        pStc=(CStatic *)GetDlgItem(ID);//IDC_VIEW为Picture控件ID
        pDC = pStc->GetDC(); 
        hDC= pDC->GetSafeHdc(); 
        pStc->GetClientRect(&rect);
        cimg.CopyOf(img);
        cimg.DrawToHDC( hDC, &rect ); // 将图片绘制到显示控件的指定区域内 
        ReleaseDC( pDC );
    }
    • 在新增按钮的响应函数中添加代码:
    void CTEST7Dlg::OnBnClickedOnOpenButton()
    {
        // TODO: 在此添加控件通知处理程序代码
        IplImage *image=NULL; //原始图像 
        if(image) cvReleaseImage(&image); 
        image = cvLoadImage("test.bmp"); //显示图片 
        DrawPicToHDC(image, IDC_PIC_STATIC); 
    }

    六、编译运行,结果如下:
    编译运行结果
    读取图片结果

    展开全文
  • mfc两种显示图片方法。文档类显示和对话框picture控件显示。资源还包括DIB文件,业界良心,分数超值。
  • opencv+MFC显示图像

    千次阅读 2014-11-20 10:28:12
    但是要将opencv中的图片显示MFC窗口,必须得包含一个CvvImage类,这个类在opencv2.2以前版本是有的,但之后的版本没有了,(小编觉得opencv都已经放弃了,是不是MFC已经没多少人用了),不过现在先不管这些,要在...
  • Opencv 基于MFC 显示图片 更改图片分辨率 保存图片本片文章将简单介绍,利用Opencv在MFC框架下,实现①显示图片图像 ,②更改图片图像分辨率,③保存图片的入门操作实例本文章功能实现依托于MFC的控件进行显示,所以...
  • OPEN_MFC显示图片

    2012-06-06 15:30:11
    显示图片MFC中,一个很好的代码,可以了考虑下载.
  • 也可以作为一个工具(至少我用来做头像了,将一个图片反复缩小就得到了合适大小的了) 此工程能够实现的功能有: ①利用Opencv在mfc控件上显示图片。 ②利用Opencv改变图片的分辨率(默认是缩小为原来一般的分辨率)...
  • OpenCV+MFC显示图像

    万次阅读 2014-04-26 19:19:57
    6.新建mfc程序。在主文件内,包含: #include<iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> 7.创建一个按钮,在其代码内编写: Mat img=imread("a.jpg"); ...
  • Cvvimage、dirth两个文件,用于关联MFC中的picture控件
  • 具体请看博客: http://blog.csdn.net/xlh145/article/details/9028511
  • 小弟初学MFC,现在要用GDI+实现在MFC窗口显示图片功能,图片的路径是压在容器里面的,不知如何用GDI+显示容器里面的图片。。。急
  • VS2013和MFC显示图片

    千次阅读 2017-02-28 09:04:44
    1.MFC对话框应用程序的新建 点击文件——新建——项目——MFC应用程序 点击确定 点击下一步 勾选最小化框和最大化框点击完成 点击工具箱添加控件 2.opencv2.4.9+Vs2013+MFC+Win10 64位 系统变量配置 ...
  • mfc图像显示

    2016-10-07 14:25:30
    mfc显示图像,并对图像进行边缘检测
  • OpenCV+MFC显示图像/视频

    千次阅读 2012-12-14 16:14:16
    OpenCV中文网站上有讲怎么使用OpenCV读入和显示图像和视频 图像文件读入和显示:http://www.opencv.org.cn/index.php/%E5%9B%BE%E5%83%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%85%A
  • 打开图片获取RGB或者BGR数据后显示图片 CStatic* videoWall = (CStatic*)GetDlgItem(ID_VIDEO_WALL); 显示 CRect rc; videoWall->GetWindowRect(&rc); int nResult = ::StretchDIBits( videoWall->GetDC()->m_hDC...
  • VS2015+opencv3.0 MFC显示图片

    千次阅读 2016-11-10 10:04:34
    在opencv中,使用cv::imshow函数可以方便的显示图片,但是如果要在windows窗体中显示opencv中Mat格式的图片,就不是那么方便了,查阅相关网络资料,找到以下几种方法,经测试有效。 来源:https://www.zhihu.co
  • 如何告诉你用MFC 显示背景图片 如何告诉你用MFC 显示背景图片 如何告诉你用MFC 显示背景图片
  • MFC常常需要显示图片信息,当前测试了png jpg两种图片显示方法,均可用。 CString FilePath = _T("D:\\jinbing\\test\\test_1_8_1\\mfc\\mfc\\img\\2.png"); CImage image; image.Load(FilePath); image.Draw...
  • 先看图: 拉伸显示 居中显示 原始大小显示 显示视频: 实现图片显示,只需要两句话: ...控件采用的是双缓冲绘图,显示效率很高,不会闪烁,支持视频、图片显示/********************************************

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,108
精华内容 10,443
关键字:

mfc显示图像