CImage类的使用介绍!
链接参考: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)
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类的使用介绍!相关推荐
- CImage类的介绍与使用
CImage类的介绍与使用 程序代码下载处:http://download.csdn.net/source/2098910 下载处:http://hi.baidu.com/wangleitongxin ...
- 【Visual C++】游戏开发笔记十四 游戏画面绘图(四) 华丽的CImage类
本系列文章由zhmxy555编写,转载请注明出处. http://qianmo.blog.51cto.com/5127279/875711 作者:毛星云 邮箱: happylifemxy@qq.com ...
- CImage类 from http://www.cnblogs.com/afarmer/archive/2012/03/31/2427273.html
CImage类 Visual C++的CBitmap类的功能是比较弱的,它只能显示出在资源中的图标.位图.光标以及图元文件的内容,而不像VB中的Image控件可以显示出绝大多数的外部图像文件(BMP. ...
- 用CImage类来显示PNG JPG等图片
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 系统环境 ...
- CImage类 from http://blog.sina.com.cn/s/blog_487547aa0100an6k.html
CImage类(一) 学习图像处理一年了,一直没能做出一个像样的VC图像处理程序,主要因为没能弄懂别人写的CDib类.前不久听说Visual Studio.net2003里新加了个专门用于图像 ...
- MFC中CImage类显示的半透明PNG存在的问题以及处理方法
在MFC中自己也做过很多关于如何实现图片半透明的方法,包括抠图,图像数据计算等,但是使用MFC中CImage的时候有时候是透明的,有时候透明部分为白色!让人难以置信,最后在不经意间发现了这边文章才恍然 ...
- CImage类之GetBits、GetPixel、GetPitch、GetBPP应用
CImage类之GetBits.GetPitch.GetPixel.GetBPP应用 函数介绍 GetBits void* GetBits() throw(); 获取一个指向位图的实际内存地址的指针. ...
- 【无标题】c++ MFC图像处理CImage类常用操作代码
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9598974.html 我看了一下发现关于c++下的CImage图像处理类 的图像处理相关的介绍 ...
- 【图像处理】CImage类的简单应用
CImage类的介绍与使用 CImage类是ATL和MFC共用的一个类,其头文件为atlimage.h,主要用于图片文件的打开,显示与保存.这里需要注意的是,在VS2010和VS2012的MFC ...
最新文章
- UIScrollView上面放一个UIScrollView或者UITableView拖动时候 View出现一闪一闪解决办法...
- 你要的2019最全目标检测都在这里啦!
- 外包网络推广公司探索出高排名网站优化的技巧!
- python初学者视频-python从入门到精通视频(全60集)
- linux存储--inode详解(五)
- linux 查看libusb版本,linux – 从使用libusb的设备读取问题
- PHP算法根据周数获取开始结束日期
- LAMP攻略: LAMP环境搭建,Linux下Apache,MySQL,PHP安装与配置
- Linux中vim编辑器的缩进的功能键
- LinuxMySQL主从配置
- 开发里程碑计划_如何通过里程碑控制项目进度
- Spring事务方法与非事务方法执行相互调用不回滚,你踩过这个坑没?
- webtop搭建简单知识库粗略介绍
- 分布式云时代,腾讯云为何自研操作系统
- nacos-demo feign调用
- STC学习:可切换内容的电子音乐
- FileUtils的简单读写文件操作
- NE555延时电路设计
- CANoe软件打不开了怎么办?
- 浅谈计算机网络发展方向,浅谈计算机网络的发展方向