MFC的CImage图形处理

转载 2018年04月17日 15:06:32

参考: http://www.cnblogs.com/afarmer/archive/2012/03/31/2427273.html

Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu  转载请标明来源 

 


CImage支持的图片格式有很多,像通常用的jpg, png, bmp,gif等都支持的不错。(CImage类基于GDI+,从VC.NET起引进,VC 6.0中没有。)

按照我们常用的图片处理需求,一般是:图片加载、图片指定到控件、图片绘制、图片修改、图片转换、(图片创建)


1. 图片加载 /打开

CImage加载/打开图片加载的方法有三个

a. 指定路径文件名加载 

CImage::load方法

可以根据load返回的结果来判定是否加载图片成功。

b. 指定resourceid加载,这种情况是把图片导入到了resource中,使用resource中定义的id加载

CImage::LoadFromResource

c. 绑定一个Bitmap,使用Attach方法,绑定一个Bitmap,这样就可以使用Cimage的许多方法了

CImage::Attach

使用这种方法记载的图形可以是DIB也或者是DDB图形,取决于绑定的HBITMAP是否是DIB图形,可以给予IsDIBSection判定(DIB: 设备无关图形  DDB:设备有关图形)


2. 图片指定到一个控件上

通常MFC内部控件使用到的是HBITMAP或CBitmap结构

我们打开图片结束后,可以使用

        image.Detach() 返回HBITMAP

        CDC::FromHandle(image.Detach()) 返回CBitamp


3. 图片绘制

      图片绘制到屏幕上,就需要相关的绘图设备了,需要和设备DC相关,所以几个绘图函数的第一个参数都是CDC*

      常用绘图函数:

CImage::Draw 绘制

CImage::StretchBlt 拉伸 (注意调用这个函数之前设置拉伸模式SetStretchBltMode)

CImage::AlphaBlend 混色

Cimage::TransparentBlt 透明绘制

CImage::MaskBlt 掩码绘制 Combines the color data for the source and destination bitmaps using the specified mask and raster operation. 

CImage::PlgBlt 平行四边形绘制 Performs a bit-block transfer from a rectangle in a source device context into a parallelogram in a destination device context. 


4. 图片修改

图片内容修改的方法有几种,

一种单个pixel修改,使用 

Cimage::SetPixelRGB

一种是批量修改,获取所有Pixel像素信息,批量的进行处理

CImage::GetBits获取到图片内存点的位置

使用这种方法的时候,需要考虑图形的结构,使用CImage::GetBPP获取每个像素点占几位,还需要使用CImage::GetPitch获取一行位的个数,根据GetPitch的正负值来判定GetBits获取到的head是首行的还是尾行的。

修改的话,就可以直接修改了,例如24位的数据,通常是BGR这种格式,每个Pixel像素第一个字节为Blue,第二个字节代表Green,第三个字节代表Red


5. 图片格式转换/保存

Cimage类提供了保存为其他格式的函数:

CImage::Save支持的参数有

The file type to save the image as. Can be one of the following:

  • ImageFormatBMP   An uncompressed bitmap image.

  • ImageFormatPNG   A Portable Network Graphic (PNG) compressed image.

  • ImageFormatJPEG   A JPEG compressed image.

  • ImageFormatGIF   A GIF compressed image.


6. 图片创建

除了通过Load方法创建一个图片之外,我们还可以通过Create方法创建一个图片,然后使用图片修改的方法来定义各个Pixel的信息

Cimage::Create

CImage::CreateEx

创建出的图片,使用4. 图片修改中的方法进行处理,然后可以使用Save方法保存起来


MFC中CImage类显示的半透明PNG存在的问题以及处理方法

在MFC中自己也做过很多关于如何
  • lixiang987654321
  • lixiang987654321
  • 2014-10-23 08:56:48
  • 5345

MFC:利用CImage动态加载图像,无需Picture Control控件

在MFC对话框中动态显示图片,本来还想着用Picture Control控件,百度之后也觉得挺麻烦的,下面介绍一种利用CImage 比较简单的显示图片方法。 头文件Dlg.h中新增: CImage...
  • zhangbohh8662
  • zhangbohh8662
  • 2015-08-19 12:58:02
  • 1732

MFC的 CImage 解析

CImage作用:显示jpg,bmp等图片的功能。   我们可以通过它做界面的贴图功能。 演示功能: 1。保存图片 保存图片只有一个函数,就是Save函数,该函数有两个参数,一个是文件的完整...
  • c1520006273
  • c1520006273
  • 2016-01-18 01:46:10
  • 971

MFC 使用CImage获取到屏幕截图,指定格式保存到文件

本文主要介绍了使用C++中的
  • q244767346
  • q244767346
  • 2014-07-17 22:19:07
  • 1676

VS2008-MFC中使用CImage的一个引用问题

要在MFC中使用CImage就要引用包含CImage类的头文件atlimage.h 比如打开应用程序的stdafx.h文件添加CImage类的包含文件: #include <atlimage....
  • Gerobeon
  • Gerobeon
  • 2013-03-15 14:42:00
  • 4167

MFC CImage 读取图像 像素

参考链接: 1、http://www.cnblogs.com/lemon0823/archive/2013/03/11/2953551.html 2、https://zhidao.baidu.co...
  • xiaoxiao133
  • xiaoxiao133
  • 2016-12-07 19:48:41
  • 1644

【图像处理】CImage类的简单应用

CImage类概述 CImage是MFC和ATL共享的新类,它能从外部磁盘中调入一个JPEG、GIF、BMP和PNG格式的图像文件加以显示,而且这些文件格式可以相互转换。由于CImage在不同的Win...
  • hero_myself
  • hero_myself
  • 2015-04-18 10:56:24
  • 1353

应用CImage类用文件和流的方式显示图片和放大缩小图片

1.是MFC工程 2.创建默认工程:单文档工程 3.工程名:JPEGTest 4.1在CJPEGTestView类中添加 HANDLE    m_hFile; CImage m_Image;...
  • Templar1000
  • Templar1000
  • 2014-05-29 01:39:54
  • 3676

mfc 利用CImage类解决多个PNG多次叠加的闪烁问题

CImage类可以加载BMP、PNG等格式,遇到一般的闪烁问题,大多数是直接采用换双冲问题;但是对于多次快速加载叠加的PNG图片时(如子绘滑块),采用双缓冲技术仍然是有闪烁现象。这时需要将图片都加载到...
  • Roland2014
  • Roland2014
  • 2015-08-29 15:10:32
  • 986
收藏助手
不良信息举报
您举报文章:MFC的CImage图形处理
举报原因:
原因补充:

(最多只允许输入30个字)