链接参考:http://www.cnblogs.com/juncheng/articles/1600730.html

CImage是MFC和ATL共享的新类,它能从外部磁盘中调入一个JPEG、GIF、BMP和PNG格式的图像文件加以显示,而且这些文件格式可以相互转换。例如通过简单的几句,就可以实现CImage类和CBitmap类实例的转换:

HBITMAP hBitmap=image.Detach();
CBitmap bmp;
bmp.Attach(hBitmap);

这样一来,就又回归到以前操纵CBitmap的方式了.CImage本身封装了DIB(设备无关位图)的功能,因而能够处理每个位图像素。

它具有下列最酷特性:
  1、AlphaBlend支持像素级的颜色混合,从而实现透明和半透明的效果。
  2、PlgBlt能使一个矩形区域的位图映射到一个平行四边形区域中,而且还可能使用位屏蔽操作。
  3、TransparentBlt在目标区域中产生透明图像,SetTransparentColor用来设置某种颜色是透明色。
  4、MaskBlt在目标区域中产生源位图与屏蔽位图合成的效果。

由于CImage在不同的Windows操作系统中其某些性能是不一样的,因此在使用时要特别注意。例如,CImage::PlgBlt和CImage::MaskBlt只能在 Windows NT 4.0 或更高版本中使用,但不能运行在Windows 95/98 应用程序中。CImage::AlphaBlend和CImage::TransparentBlt也只能在 Windows 2000/98或其更高版本中使用。即使在Windows 2000运行程序还必须将stdafx.h文件中的WINVER和_WIN32_WINNT的预定义修改成0x0500才能正常使用。

(1):MFC中显示图像的类CImage:

我使用的函数:

void CAviTestDlg::showCimage(CImage &image)
{
//CImage image; //创建图片类
//image.Load(rphoto); //根据图片路径加载图片
CRect rect;//定义矩形类
int cx = image.GetWidth();//获取图片宽度
int cy = image.GetHeight();//获取图片高度
GetDlgItem(IDC_SHOWPIC)->GetWindowRect(&rect);//将窗口矩形选中到picture控件上
ScreenToClient(&rect);//将客户区选中到Picture控件表示的矩形区域内
GetDlgItem(IDC_SHOWPIC)->MoveWindow(rect.left, rect.top, cx, cy, TRUE);//将窗口移动到Picture控
CWnd *pWnd=GetDlgItem(IDC_SHOWPIC);//获得pictrue控件窗口的句柄
pWnd->GetClientRect(&rect);//获得pictrue控件所在的矩形区域
CDC *pDC=pWnd->GetDC();//获得pictrue控件的DC
image.Draw(pDC->m_hDC, rect); //将图片画到Picture控件表示的矩形区域
ReleaseDC(pDC);//释放picture控件的DC
}

(2):CImage(MFC) 加载剪贴板图像数据

CView *cv=this;
CImage* m_image;
OpenClipboard(NULL);
HANDLE h=::GetClipboardData(CF_BITMAP);
if(h==0)
{
CloseClipboard();
return;
}
BITMAP bm;    GetObject(h,sizeof(bm),&bm);
if(m_image!=NULL)
{
delete m_image;
m_image=NULL;
}
m_image=new CImage();
m_image->Create(bm.bmWidth,bm.bmHeight,32,0);
HDC hdc=m_image->GetDC();
CDC imgDC;
imgDC.Attach(hdc);
CBitmap *pBmp=new CBitmap;
pBmp->Attach(h);
CClientDC dc(cv);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap *pOldBitmap=memDC.SelectObject(pBmp);
imgDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&memDC,0,0,SRCCOPY);
memDC.SelectObject(pOldBitmap);
pBmp->Detach();
delete pBmp;
imgDC.Detach();
m_image->ReleaseDC(); 

(3):微软官方说明:http://technet.microsoft.com/zh-cn/magazine/k826sz5e(en-us,VS.80).aspx

类的使用:http://msdn.microsoft.com/zh-cn/library/bwea7by5(v=vs.80)

CImage::Create 

Creates a CImage bitmap and attach it to the previously constructed CImage object.

BOOL Create(int nWidth,int nHeight,int nBPP,DWORD dwFlags = 0
) throw( );

Parameters

nWidth

The width of the CImage bitmap, in pixels.

nHeight

The height of the CImage bitmap, in pixels. If nHeight is positive, the bitmap is a bottom-up DIB and its origin is the lower left corner. If nHeight is negative, the bitmap is a top-down DIB and its origin is the upper left corner.

nBPP

The numbers of bits per pixel in the bitmap. Usually 4, 8, 16, 24, or 32. Can be 1 for monochrome bitmaps or masks.

dwFlags

Specifies if the bitmap object has an alpha channel. Can be a combination of zero or more of the following values:

  • createAlphaChannel   Can only be used if nBPP is 32, and eCompression is BI_RGB. If specified, the created image has an alpha (transparency) value for each pixel, stored in the 4th byte of each pixel (unused in a non-alpha 32-bit image). This alpha channel is automatically used when callingCImage::AlphaBlend.

CImage类的使用介绍!相关推荐

  1. CImage类的介绍与使用

    CImage类的介绍与使用 程序代码下载处:http://download.csdn.net/source/2098910 下载处:http://hi.baidu.com/wangleitongxin ...

  2. 【Visual C++】游戏开发笔记十四 游戏画面绘图(四) 华丽的CImage类

    本系列文章由zhmxy555编写,转载请注明出处. http://qianmo.blog.51cto.com/5127279/875711 作者:毛星云 邮箱: happylifemxy@qq.com ...

  3. CImage类 from http://www.cnblogs.com/afarmer/archive/2012/03/31/2427273.html

    CImage类 Visual C++的CBitmap类的功能是比较弱的,它只能显示出在资源中的图标.位图.光标以及图元文件的内容,而不像VB中的Image控件可以显示出绝大多数的外部图像文件(BMP. ...

  4. 用CImage类来显示PNG JPG等图片

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 系统环境 ...

  5. CImage类 from http://blog.sina.com.cn/s/blog_487547aa0100an6k.html

    CImage类(一)     学习图像处理一年了,一直没能做出一个像样的VC图像处理程序,主要因为没能弄懂别人写的CDib类.前不久听说Visual Studio.net2003里新加了个专门用于图像 ...

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

    在MFC中自己也做过很多关于如何实现图片半透明的方法,包括抠图,图像数据计算等,但是使用MFC中CImage的时候有时候是透明的,有时候透明部分为白色!让人难以置信,最后在不经意间发现了这边文章才恍然 ...

  7. CImage类之GetBits、GetPixel、GetPitch、GetBPP应用

    CImage类之GetBits.GetPitch.GetPixel.GetBPP应用 函数介绍 GetBits void* GetBits() throw(); 获取一个指向位图的实际内存地址的指针. ...

  8. 【无标题】c++ MFC图像处理CImage类常用操作代码

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9598974.html 我看了一下发现关于c++下的CImage图像处理类 的图像处理相关的介绍 ...

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

    CImage类的介绍与使用    CImage类是ATL和MFC共用的一个类,其头文件为atlimage.h,主要用于图片文件的打开,显示与保存.这里需要注意的是,在VS2010和VS2012的MFC ...

最新文章

  1. UIScrollView上面放一个UIScrollView或者UITableView拖动时候 View出现一闪一闪解决办法...
  2. 你要的2019最全目标检测都在这里啦!
  3. 外包网络推广公司探索出高排名网站优化的技巧!
  4. python初学者视频-python从入门到精通视频(全60集)
  5. linux存储--inode详解(五)
  6. linux 查看libusb版本,linux – 从使用libusb的设备读取问题
  7. PHP算法根据周数获取开始结束日期
  8. LAMP攻略: LAMP环境搭建,Linux下Apache,MySQL,PHP安装与配置
  9. Linux中vim编辑器的缩进的功能键
  10. LinuxMySQL主从配置
  11. 开发里程碑计划_如何通过里程碑控制项目进度
  12. Spring事务方法与非事务方法执行相互调用不回滚,你踩过这个坑没?
  13. webtop搭建简单知识库粗略介绍
  14. 分布式云时代,腾讯云为何自研操作系统
  15. nacos-demo feign调用
  16. STC学习:可切换内容的电子音乐
  17. FileUtils的简单读写文件操作
  18. NE555延时电路设计
  19. CANoe软件打不开了怎么办?
  20. 浅谈计算机网络发展方向,浅谈计算机网络的发展方向

热门文章

  1. Redis及Spring-Data-Redis入门学习
  2. 生产环境部署python代码(django+uwsgi+nginx)
  3. C 程序的存储空间记录
  4. POS开发问题 - 多个弹出框的实现
  5. Shell脚本之IP网络地址和广播地址计算
  6. ***某知名网络安全公司
  7. OSPF的LSA类型 ——连载五自治系统外部的LSA
  8. 用ACL构建防火墙体系
  9. 编码整洁之道:专业程序员的行为准则(英文版)
  10. Centos 安装新python