CImage成员函数Load、Create、Draw、Save使用方法简介

       在Visual C++中若想处理图片,可以使用CBitmap 类或静态图片控件。但它们处理只能处理BMP格式的图片、图标、光标以及图元文件等;使用起来非常受限,因此我们一般只是在做程序界面时使用。而CImage可以处理JPGE、GIF、BMP、PNG等多种格式图片,包括格式转换、裁切、复制、拼接等许多应用方法。CImage类表面上看像是MFC的封装类,其实它是MFC和ATL共享的新类,它也可以在非MFC环境下使用。本文就CImage的主要成员函数Load、Draw、Save的使用方法做一简单介绍。
一、介绍内容
       CImage类对象通过调用其成员函数Load从磁盘中载入诸如JPEG、GIF、BMP和PNG格式的图片文件进行处理,再调用Draw函数将图片文件绘制到另外一个CImage类对象中(包括复制、缩放等),最后通过Save函数可以保存图片文件,也可以利用Save相互转换图片文件的格式。
二、使用CImage类Load、Create、Draw、Save几个函数的一般步骤:
     <1>包含头文件:
            #include<atlimage.h> //在C++空项目中需要包含这个头文件,而在高版本MFC不需如此即可使用CImage
     <2>声明一个CImage类对象,然后调用其成员函数Load加载一个图片文件。
            CImage srcImage;  //原图像
            srcImage.Load("路径\\文件名.jpeg"); 
     <3>再声明一个CImage对象,然后调用Create函数生成一个空白的图像(实际是全黑)。
            CImage destImage;//目标图像
            destImage.Create(destWidth,destHeight,bpp); //前两个参数的单位是像素,bpp是位深度,jpeg的位深度是24
             说明:如果不使用Create函数,而是仍然使用Load函数,则可以将两幅图片组合到一起,变化还有很多,可以试验。
      <4>调用成员函数Draw绘制图像,亦即把原图像中的全部或部分内容复制到目标图像中。
            BOOL Draw (HDC hDestDC, int xDest, int yDest, int nDestWidth, int nDestHeight, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight);
                 //a. 调用Draw函数的是原图像对象,即srcImage.Draw( ... ... ),不要弄混淆
                 //b. HDC hDestDC是目标图像对象的设备上下文指针,可以通过destImage.GetDC()获得,注意指针使用完毕要用destImage.ReleaseDC()语句将指针释放,否则,再次获取指针时会报错。
                 //c. xDest与yDest,目标图像中拟粘贴区域的左上角坐标(单位:像素)
                 //d. nDestWidth与DestHeight,目标图像中拟粘贴区域的宽、高
                 //e. xSrc与ySrc,源图像中拟复制域左上角坐标
                 //h. nSrcWidth与nSrcHeight,原图像中拟复制区域宽、高
                 说明:从函数的参数表可以看出,原图像复制区域与目标图像的粘贴区域大小可以不同,亦即可以通过Draw函数对图像进行缩放;但大小不同时,可能会发生图像颜色失真现象,为解决这一问题,可以在调用Draw函数前,增加一条语句:SetStretchBltMode(destImage.GetDC(), COLORONCOLOR); 注意这里是对目标图像对象进行设置,不要弄反。
        <5>调用Save函数将目标图像保存到文件中
               destImage.Save("路径\\文件名.jpeg"); //这里,如把文件后缀改变,则可以改变文件格式(当然前面提到的位深度bpp要改变)
        CImage类的成员函数还有很多,这里介绍的只是常用的几个。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值