版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 基于GDI+的图像格式转换与几何变换研究 陈敏+林金表Summary:在VC+中要实现常用图像格式之间的转换,通常需要掌握每种图像格式的文件头格式、调色板、图像压缩算法等具体细节,实现过程复杂。运用GDI+技术,无需了解每种图像格式的具体含义,即可实现常用图像格式间的转换,并且可以将简单几何转换后的图像保存在任意目录下。Key:GDI+;图像格式转换;几何变换DOIDOI:10.11907/rjdk.143701:TP317.4:A :16727800(2015)0010141020 引言图像是人类获取信息的主要途径之一,在研究图像处理过程中,实现常用图像文件格式的相互转换符合现实需求。例如
2、实现常用格式图片BMP与GIF的相互转换,首先需要对BMP和GIF文件格式进行分析,然后才能实现二者之间的读取与显示等相关操作1。GDI(Graphics Device Interface:图形设备接口), 是Windows提供给应用程序的编程接口2。GDI+是基于类的应用程序编程接口3。GDI+是在GDI的基础上发展起来的,增加了许多新功能。GDI+中引用了对COM(组件对象模型)技术的支持,通过COM技术,开发人员在输出屏幕和打印机信息时无需考虑显示设备的细节,只需要调用GDI+库输出类的一些方法即可完成绘图工作 4,GDI+简化了图像文件访问程序5。随着GDI+的升级,功能也随之变得更加
3、强大,如几何转换、Alpha blending、纹理、贴图、增强的文本及图像显示技术6等,极大方便了开发人员在图形、图像领域的开发应用,使图像处理工作变得相对简单。1 基于GDI+的多种格式图像转换1.1 GDI+库初始化在调用GDI+函数之前,需要调用GDI+库的初始化函数GdiplusStartup来初始化GDI+库,GdiplusStartup的原型如下:Status GdiplusStartup( _out ULONG_PTR token *token,_in const GdiplusStartupInput *input,_out GdiplusStartupOutput *out
4、put);GdiplusStartup (&m_pGdiToken, &m_gdiplusStartupInput, NULL)函数&m_pGdiToken是存储地址,记录了此次使用GDI+的标记;&m_gdiplusStartupInput包含GDI +版本,是指向调试回调函数的指针,以及用于指定是否支持后台线程和外来的图像编码等信息;output是指向GdiplusStartupOutput 类型数据的一个指针,初始化结束时,初始化函数GdiplusStartup在GdiplusStartupOutput类型数据中存放一个事件钩子函数指针和卸载事件钩子函数指针;NULL表示Suppress
5、BackgroundThread的数据成员错误时即为空。结束后使用GdiplusShutdown()函数关闭GDI+。1.2 图像显示(1)查看系统可用编码器信息。用已安装图像编码器的程序段,寻找格式为format的图像编码器类型标识码CLSID,并保存在pCLSID中,成功返回true,否则就返回false。GetImageCLSID得到格式为format的图像文件编码值和访问该格式图像COM组件的GUID值,保存在pCLSID中。在可用编码信息中查找是否支持format格式的编码值,函数原型为:Int GetImageCLSID(const WCHAR *format, CLSID *pC
6、LSID)为了得到所有编码器信息、编码器数量、储存编码器信息所需要的内存等,可以调用函数GetImageEncoders()。该函数可让用户知道,在GDI+的情况下哪些图像编译信息是可用的,函数GetImageEncoders的原型是:Status GetImageEncoders (UINT unmEncoders,UINT size,ImageCodecInfo *encoders);在GDI+的Image类封装了对BMP、GIF、JPEG、PNG、TIFF、WMF(Windows元文件)和EMF(增强WMF)图像文件的调入、格式转换以及简单处理功能。在Image类从外设转入图像与内存中时
7、需要图像编码器(ImageEncoders)的帮助。图像编码器(ImageEncoders)和图像解码器(ImageDecoders)是与特定的图像格式相联系的,也就是说不同格式的图像有不同的图像编码器和图像解码器。(2)图像文件读取。在GDI+中显示图像文件转入到内存并显示,首先要创建一个Image对象,然后调用FileOpen()打开各类常用格式的图像文件,szFilter=常用图像格式文件(*.*)|*.*|;在MFC ClassWixard中重载OnFileOpen() Static char szFilter=位图文件(*.bmp;*.dib)|*.bmp;*.dib|JPG文件(*
8、.jpg)|*.jpg|JPEG文件(*.jpeg)|*.jpeg|GIF文件(*.gif)|*.gif|PNG文件(*.png)|*.png|All Files(*.*)|*.*|;CfileDialog CFileDialog dlgChoseImage(1,NULL,NULL,NULL,szFilter)运行上述程序可以打开任意目录下任何常用格式图片。1.3 图像格式转换 将打开的图像文件保存,定义一个函数StroeBitmap (CString cs)来存储图像旋转后的位图。BITMAP bitmp;HBITMAP hbitmap=(HBITMAP)GetCurrentObject(m
9、emDC,OBJ_BITMAP);GetObject(hbitmap,sizeof(bitmp),(void *)&bitmp);BITMAPFILEHEADER bmfHeader;BITMAPINFOHEADER bi;打开图像位图文件的存储地址,调用FileSave() 对旋转图像进行保存,可以保存为任意常用格式的图片,可以随时选择保存的图像格式:Image Image(ToWChar(strOpenFileName.GetBuffer(strOpenFileName.GetLength();Cstring strFileSave;Static char szFilter =” 位图文件
10、(*.bmp;*.dib)|*.bmp;*.dib|JPEG文件(*.jpeg;*.jpg)|*.jpeg;*.jpg|GIF文件(*.gif)|*.gif|PNG文件(*.png)|*.png|All Files(*.*)|*.*|;CFileDialog dlgChoseImage(0,”BMP”,未命名,NULL,szFilter);Image.Save(ToWChar(strFileSave.GetBuffer(strFileSave.GetLength() &clsid,NULL);将转换后的图片存到指定目录,定义图像名称。2 图像几何转换GDI+提供函数OnDraw(CDC* pD
11、C),可绘制图形或显示图形,改变图像显示的位置,任意拉伸图像的大小,任意旋转图像,代码如下:Imageimage(ToWChar(strOpenFileName.GetBuffer(strOpenFileName.GetLength();Point destPoints3 =Point(0,0),Point(800,0),Point(0, image.GetWidth();Point* pdestPoints = destPoints;graphics.DrawImage(&image, pdestPoints, 3);:BitBlt(pDC-m_hDC,0,0,image.GetWidth(
12、),image.GetHeight(),memDC,0,0,SRCCOPY);:DeleteObject(memBM);用CreateCompatibleBitmap(API函数)来创建一幅与指定设备环境相关的设备兼容位图。用CreateCompatibleBitmap将旋转后的图像位图保存。memDC=:CreateCompatibleDC(pDC -m_hDC);HBITMAPmemBM=(HBITMAP):CreateCompatibleBitmap(pDC-m_hDC,image.GetHeight(),image.GetWidth();:SelectObject(memDC,memB
13、M);打开原图,将JPG转换成BMP,经过几何变换后,得到如图1所示的效果。图1 几何变换效果3 结语GDI+是一种优秀的图形图像处理技术。本文的程序是在Windows 系统Microsoft Visual Studio 2010下基于GDI+调试通过的,它能够打开BMP、GIF、JPEG、PNG、TIFF,WMF和EMF等任意常用格式图像,可以任意几何变换显示和保存,如旋转、拉伸、缩放等;可以转换成任意常用图像格式,并保存在任意目录下。Reference:1 韩娇.基于VC+的BMP格式图像与GIF格式图像的相互转换J.武汉理工大学学报,2007,12(29):2325.2 李睿敏,陈俐坊.基于GDI+技术图形图像处理J.纺织机械,2013(4):3033.3 周鸣扬,曾洁玫. GDI+程序设计实例M.北京:中国水利水电出版社,2004.4 刘涛. 基于Visual C+6.0的GDI+图像编程J.中文信息,2003(11):8789.5 刘海砚,安晓亚. 基于GDI+的图像快速处理C/北京:中国地理信息系统协会第四次会员代表大会暨第
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年物业管理与服务质量标准手册
- 城市道路施工环境保护规范制度
- 2025年医疗废物运输与处置规范
- 财务预算与成本控制制度
- 办公室人力资源配置制度
- 2026年浙江武义城市建设投资集团有限公司招聘派遣制人员5人备考题库完整答案详解
- 养老院老人健康数据统计分析制度
- 养老院医疗废物处理制度
- 宜宾市社会福利院2025年公开招聘编外聘用人员备考题库及答案详解一套
- 三十六工程处2025年招聘备考题库附答案详解
- 陕西交控集团2026校园招聘考试备考题库附答案
- 生活委员培训
- 2026年自由职业者合同
- 2026中国支付清算协会招聘参考考试试题及答案解析
- 2026年药店制度培训试题及答案
- 2025年四川省法官逐级遴选考试题及答案
- 槟榔分销商合同范本
- 地质基础知识培训课件
- 中国华能集团有限公司吉林分公司招聘笔试题库2025
- 采油工岗位安全职责
- 车位分期付款合同范本
评论
0/150
提交评论