基于对话框的图片打开与显示
来源:互联网 发布:两个表格相同数据合并 编辑:程序博客网 时间:2024/05/17 02:18
(一)背景
在老师的指导下致力于计算机视觉方面的研究,语言方面选择了C++,这给我增加了难题,我只学过C语言,没学过C++,看来要开始学C++了。
对一幅图片进行灰度化、边缘检测等方面的处理,首先需要把图片显示出来。后期还要处理从摄像头获取的图片,而一般摄像头获取的图片的格式是.jpg(.jpeg)格式。为了实现jpg格式图片的打开与显示,我到图书馆翻阅了很多资料,要么有的教程讲如何显示.bmp格式的图片,要么就是显示特定目录下的.jpg格式的图片,终于找到了一篇相关的文章,它提供的方法是使用基于COM接口的Ipicture控件,但我想它虽然能暂时满足当时的需求,但会对以后的操作带来麻烦,所以还是摒弃了它。
无意间找到了图像处理的三利器之一——GDI+,发现它的功能很强大,至少在图片显示方面,因为GDI+得Image类支持几乎所有的图像格式,具体包括:BMP、ICON、GIF、JPEG、Exif、PNG、TIFF、WMF和EMF。而且它的一个函数GetPixel也很实用,它能获取某点的RGB各分量的值,所以决定借助于GDI+显示.jpg格式的图片。
(二)配置方法
下面介绍下GDI+在Visual C++ 2005中的配置方法(Visual C++ 2005中已经包含了GDI+开发包)
1、在项目属性中添加GDI+静态链接库(假设项目名为Test)
打开项目,选择【项目】—【Test属性】命令,打开“项目属性”对话框。展开“配置属性”,选择“链接器”下的“输入”,然后在“附加依赖项”中添加“gdiplus.lib”。如果添加多个库文件,中间用空格隔开。
现在完成了“Debug”模式下GDI+的配置,此时Debug模式下生成的程序就能正常编译了。要想在“Release”模式下程序也能正常编译,只要选择对话框左上角“配置”下的“Release”选项,然后重复刚才的添加方法即可。
2、添加必要代码
(1)打开“解决方案资源管理器”,打开“stdafx.h”文件,在其中添加如下代码:
#include <gdiplus.h>
using namespace Gdiplus;
(2)打开“类视图”,选中应用程序类CTestApp,为其添加两个成员变量。
private:
ULONG_PTR m_GdiplusToken;
GdiplusStartupInput m_GdiplusStartupInput;
(3)在CTestApp类的InitInstance函数中添加如下代码:
//GDI+图像库初始化
GdiplusStartup(&m_GdiplusToken,&m_GdiplusStartupInput,NULL);
(4)重写CTestApp类的ExitInstance函数,并添加如下代码:
int CPhotoIDEApp::ExitInstance()
{
//关闭GDI+图像库
GdiplusShutdown(m_GdiplusToken);
return CWinApp::ExitInstance();
}
到此配置过程全部结束。
在Visual C++ 6.0中使用GDI+
1、由于Visual C++ 6.0不包含GDI+的开发包,所以需要下载一个GDI+ SDK,GDI+的开发包可以在下面提供的例程中得到。
2、在项目属性中添加GDI+静态链接库
打开工程,选择【Project】—【Setting】命令,打开“项目属性”对话框,然后选择“Link”标签,在“Object/library modules”中输入“gdiplus.lib”。
同样,如果想在“Release”模式下使用GDI+,可以单击“Setting For”下拉列表框,选择“Win32 Release”,然后重复刚才的添加方法即可。
3、添加必要代码
除第一步不同外,其它配置方法与VC 2005的配置方法相同。Visual C++ 6.0需要在stdafx.h中添加如下代码:
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#include "GdiPlus.h"
using namespace Gdiplus;
#endif
到此,GDI+的工程设置已经完成了,如果你还没有配置得当,可以发邮件至cndongliang@126.com,或在博文后边留言,我会尽力帮您解决问题。
(三)编写打开对话框函数
首先在TestDlg.h中的构造函数中添加CString类型的变量m_filename,用于保存要打开的文件的文件名。
void CTestDlg::OnOpen()
{
// TODO: 在此添加控件通知处理程序代码
CFileDialog dlg(TRUE,"jpg","*.jpg",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"JPEG文件(*.jpg)|*.jpg|GIF文件(*.gif)|*.gif||",NULL);
if(dlg.DoModal()==IDOK)
{
m_filename=dlg.GetFileName();
Invalidate(false);
}
}
(四)在OnPaint函数中添加显示图片的代码
CDC* pDC=GetDC();
Graphics graph(pDC->GetSafeHdc());
CRect winrect;
GetClientRect(winrect);
Rect rect(150,80,400,300);
Image image(m_filename.AllocSysString());
graph.DrawImage(&image,rect);
ReleaseDC(pDC);
完整的代码请点击下面的链接下载,其中包括GDI+开发包(有问题请发送邮件至cndongliang@126.com,大家共同探讨)
http://download.csdn.net/source/1647741
- 基于对话框的图片打开与显示
- 基于图片的信息隐藏与显示
- MFC 基于对话框的图片控件(picture)动态加载.bmp图片并显示
- VC中打开一幅jpg图片并且显示在对话框上的方法和代码
- 基于对话框的打开保存文件
- 基于OPENCV的图片打开
- 编写一个基于对话框的应用程序可以用来打开及显示文本文件设置所显示的文本的字体颜色。
- PyCharm下利用pyqt对话框打开图片,显示
- 基于Dialog的MFC对话框上利用OpenCV 3.0显示图片
- |打开对话框最大化显示|
- 基于JSP实现图片的数据库存储与显示
- 基于JSP实现数据库中图片的存储与显示
- 基于JSP实现图片的数据库存储与显示
- 基于JSP实现图片的数据库存储与显示
- 使基于对话框的程序全屏显示
- 基于对话框的多视图显示
- 基于MFC对话框的图片触摸控制
- 基于对话框显示,动态显示jpg.bmp等图片,并获取鼠标移动的坐标值及rgb值
- Working with Variants in Visual Basic
- September, 9(R)
- jQuery入门学习七:可编辑的表格
- Erlang的第一款IDE:Leix's Editor --基于wxErlang
- JS文档生成工具JSDoc
- 基于对话框的图片打开与显示
- Ubuntu下配置OpenCV开发环境
- Virtools脚本语言(VSL)教程 - 全局变量bc与ac
- 智力题2
- 第九章:IO流
- Virtools脚本语言(VSL)教程 - 使用 GUID
- learning about Project Management -A04- Project Team
- 图解高端内存[zz]
- 嵌入式上UC/OS - II使用注意点------任务调度