【图像处理】CImage类的简单应用
来源:互联网 发布:云笔记本 知乎 编辑:程序博客网 时间:2024/04/30 18:33
CImage类的介绍与使用
CImage类是ATL和MFC共用的一个类,其头文件为atlimage.h,主要用于图片文件的打开,显示与保存。这里需要注意的是,在VS2010和VS2012的MFC编程中,不需要将头文件包含进来。MFC中要使用CImage类,必须先将头文件包含进来,可以包含在当前代码的CPP文件中,也可以包含在所属类的头文件中,不过最好还是包含在工程的stdafx.h文件中。CImage总共有39个成员函数。具体函数介绍,请查阅MSDN。
彩色图像转换成8位灰度图像
将一张普通彩色图像转换成8位灰度图像,需要调用灰度图像的调色板来处理,且需要调用CImage::IsIndexed来判断是否使用颜色表,若是则修改颜色表,否则直接对像素对颜色值进行处理。
void CImageDlg::TurnToGray(CImage *img,CImage *newimg){int width=img->GetWidth();int height=img->GetHeight();COLORREF pixel;RGBQUAD ColorTable[256];for (int i = 0; i < 256; ++i){ColorTable[i].rgbBlue = ColorTable[i].rgbGreen = ColorTable[i].rgbRed = i;}newimg->SetColorTable(0, 256, ColorTable);byte* pDataDst = (byte*)newimg->GetBits();int pitchDst = newimg->GetPitch();int bitCountDst = newimg->GetBPP() / 8;if (bitCountDst != 1)return;int r,g,b,avg;for(int i=0;i<width;i++){for(int j=0;j<height;j++){pixel=img->GetPixel(i,j);r=GetRValue(pixel);g=GetGValue(pixel);b=GetBValue(pixel);avg=(r+g+b)/3;*(pDataDst+pitchDst*j+i*bitCountDst)=avg;}}}
MFC对话框显示图像
void CImageDlg::ShowImage(CImage image,int id) { //一个参数是对象srcPng或者是destPng,另一个参数是控件IDhdc = ::GetDC(GetDlgItem(id)->GetSafeHwnd());GetDlgItem(id)->GetClientRect(rect);image.Draw(hdc , rect);::DeleteDC(hdc);}
打开一张图像并显示
void CEx_ImageView::OnFileOpen() //Cyan:添加{ // TODO: 在此添加命令处理程序代码 CString strFilter; CSimpleArray<GUID>aguidFileTypes; HRESULT hResult; //获取CImage支持的图像文件的过滤字符串 hResult=m_Image.GetExporterFilterString(strFilter,aguidFileTypes,_T("All Image Files")); if(FAILED(hResult)) { MessageBox(_T("GetExporterFilter调用失败!")); return; } CFileDialog dlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST,strFilter); if(IDOK!=dlg.DoModal()) return; m_Image.Destroy(); //将外部图像文件装载到CImage对象中 hResult=m_Image.Load(dlg.GetFileName()); if(FAILED(hResult)) { MessageBox(_T("调用图像文件失败!")); return; } //设置主窗口标题栏内容 CString str; str.LoadString(AFX_IDS_APP_TITLE); AfxGetMainWnd()->SetWindowTextW(str+_T("-")+dlg.GetFileName()); Invalidate();//强制调用OnDraw函数}
0 0
- 【图像处理】CImage类的简单应用
- CImage,MFC,图像处理
- MFC中显示图像的类CImage
- MFC中显示图像的类CImage
- 使用CImage进行图像处理
- Cimage类处理图像像素(数据)的3种方式
- Cimage类处理图像像素(数据)的3种方式
- CImage类 Load 图像
- vs2005中的类CImage可以很方便处理图像
- CImage类的介绍与使用 【图像打开,另存为,转为灰度图像(利用cimage方法实现)】
- MFC和ATL共享的新类CImage为图像处理提供了许多相应的处理方法
- 【图像处理】使用CImage类将彩色图像转换成8位灰色图像
- 图像的简单处理
- 简单的图像处理
- MFC的CImage图形处理
- 基于VC.NET的GDI+编程之CImage(VC图像处理新招)
- CXimage图像处理类的应用小结
- PHP图片处理类CImage
- Cookie
- [BZOJ1800]AHOI2009 FLY
- WebView的基本用法以及和js交互
- 浅谈在浏览器中打开新窗口时的数据传递问题
- 异步处理请求
- 【图像处理】CImage类的简单应用
- Salesforce: How to Send Email with Default Template?
- ADB编译全攻略
- Qt之任务栏系统托盘图标
- [BZOJ1833]ZJOI2010 数字计数|数位DP
- JDBC连接MySQL数据库
- 使用smtplib发送邮件
- Uncaught TypeError: Cannot set property 'innerHTML' of null
- matlab str到char数组再到对应的double数组