【C++】GDI+图像编程入门(一、图像的打开与显示编程)

C++本人也是初学者,很多地方也不是很懂,写博客的原因主要有以下三个原因:

1.对于学习的得思路和资料进行整理

2.为比我还菜的朋友提供一定得参考

3.请CSDN高手对我写的代码进行批评和指正。

 

这个例子很简单,在做程序编程时,我们首先还是得打开一个图片。

 

我们新建一个单文档的MFC工程,在打开菜单上面添加一个时间处理程序,命名为OnFileOpen,双击添加编辑,在OnFileOpen中添加如下代码:

 

void COpenImageFileView::OnFileOpen()
{
 // TODO: 在此添加命令处理程序代码
 CString strFilter;
 CSimpleArray<GUID> aguidFileTypes;
 HRESULT hResult;
 hResult=m_ImageShow.GetExporterFilterString(strFilter,aguidFileTypes);
 if(FAILED(hResult))
 {
  MessageBox("装入文件类型过滤器失败","信息提示",MB_OK);
  return;
 }
 strFilter="ALL Files(*.*)|*.*|"+strFilter;
 CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,strFilter);
 hResult=(int)dlg.DoModal();
 if(hResult!=IDOK)
 {
  return;
 }
 m_StrImageFileName.Format(dlg.GetFileName());
 m_ImageShow.Destroy();
 m_ShowDRect=CRect(0,0,1000,1000);
 hResult=m_ImageShow.Load(m_StrImageFileName);
 if(FAILED(hResult))
 {
  MessageBox("装入图像操作失败","信息提示",MB_OK);
  return;
 }
 m_ShowDRect=CRect(0,0,m_ImageShow.GetWidth(),m_ImageShow.GetHeight());
// CClientDC dc(this);
// m_ImageShow.Draw(dc,m_ShowDRect);
 
 //设置窗口标题栏文字
 CWnd *pWnd=AfxGetMainWnd();
 pWnd->SetWindowText("当前正在打开的图像文件名为:"+m_StrImageFileName);
 //通知程序窗口更新
 Invalidate(); 
}

 

m_ImageShow:为COpenImageFileApp类中的一个CImage类型的公共变量

m_StrImageFileName:为COpenImageFileApp类中的一个CString类型的公共变量

m_ShowDRect:为COpenImageFileApp类中的一个CRect类型的公共变量

 

这样我们已经把m_StrImageFileName加载到我们的程序中来了,现在我们再来显示图片

void CGPShowView::OnDraw(CDC* pDC)
{
 CGPShowDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 //设置背景色
 CBrush  BackBrush;
 BackBrush.CreateSolidBrush(RGB(128,128,128));
 CBrush *pOldBrush=pDC->SelectObject(&BackBrush);
 pDC->Rectangle(CRect(0,0,30000,30000));
 pDC->SelectObject(pOldBrush);
 //显示多格式图像文件
 m_ImageShow.Draw(pDC->m_hDC,CRect(&m_ShowDRect));
}

 

这样一幅图片就加载到我们的界面上了。但是很快我们又发现了一个问题,如果图片过大的话我们只能显示部分图像,上网查了一下我发现我们可以添加一个这样的方法来设置滚动条:

SetScrollSizes(MM_TEXT,CSize(m_ShowDRect.Width(),m_ShowDRect.Height()));

 

SetScrollSizes的第一个参数可以为:(MSDN上拷贝的)

Mapping Mode

Logical Unit

Positive y-axis Extends...

MM_TEXT

1 pixel

Downward

MM_HIMETRIC

0.01 mm

Upward

MM_TWIPS

1/1440 in

Upward

MM_HIENGLISH

0.001 in

Upward

MM_LOMETRIC

0.1 mm

Upward

MM_LOENGLISH

0.01 in

Upward


写上去发现总是有错误,后来我才发现,原来是我在建COpenImageFileView时选择的基类为CView不对,后来改成CScrollView就成功了。

 

本人也在学习GDI+,写得比较简单,让高手见笑了。欢迎高手给我指点

邮箱:bobui@163.com

QQ125941562

注:欢迎转载,请保留上面的作者信息

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装使用说明: 一、本下载文件是《C/C++图像处理编程》一书的演示程序,该书由清华大学 出版社出版。 二、将 "C与C++图像处理编程\"目录全部拷贝到任意盘的根目录上。 三、运行 X:\C与C++图像处理编程\DosImage.exe程序,演示图像处理功能。 四、该程序的源代码在 "C与C++图像处理编程\DosImage"目录下,用VC编译, 工作组文件为 X:\C与C++图像处理编程\DosImage\DosImage\DosImage.dsw。 修改、编辑、编译前,先将各子目录内文件的只读属性去除。 五、运行环境:Windows 1024x768 真彩色模式,文字用大字体。 编译软件:VC++ 6.0 程序特色:用C语言编写,DOS编程习惯 (过程驱动),并配所需图象文件 及字库文件。 编程练习:只需将编程练习模块Ex1 至 Ex12中任一程序的内容删除,即 可在其中编制自己的程序,不用修改菜单结构。 六、其它演示程序: WinImage Windows C 图像处理演示程序 VCImage VC++ 图像处理演示程序 Demop C++ Builder 图像处理演示程序 七、源代码 WinImage子目录 WinImage.exe的源代码 VCImage子目录 VCImage.exe的源代码 CBImage子目录 Demop.exe的源代码 八、图像采集演示程序 OkDemo子目录下为支持北京嘉恒中自图像技术有限公司 OK 系列 PCI 图 像卡的图像采集演示程序,在Windows 98与Windows 2000/XP等操作系统 下都能使用。 九、演示程序的维护 演示程序上网为程序的更新创造了条件,以后可将改正的错误和新增加 的内容定期或不定期地进行更新了。因此,希望读者能将阅读过程中发 现的错误与存在的问题,以及改进的建议等及时反馈给笔者,本人将在 力所能及的范围内进行修改,使之更加完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值