c++游戏图形库,c++绘制图形
CImage是MFC和ATL共享的新类。它提供了增强的位图支持,包括加载、保存和转换JPEG、BMP、GIF和PNG图像格式的能力。可以说微软意识到了CBitmap的不足,然后推出了CBitmap的增强版。要使用CImage类,需要在代码头添加包含atlimage.h的文件,即添加代码#includeatlimage.h 。
因为CImage有强大的类成员函数的支持,所以它有以下四个突出的特性:
2.PlgBlt可以将矩形区域的位图映射到平行四边形区域,也可以使用位屏蔽操作。
解决办法很清楚。我们用CImage类的Load函数加载图片,然后用Detch得到HBITMAP的句柄,再把这个句柄附加到CBitmap的对象上。
CImage类可以处理DIB(设备独立位图)设备独立位图文件和非DIB文件。我们可以通过Create函数或CIMGE: load处理DIB部分,并通过Attach函数将非DIB部分附加到CIMGE对象。
对于以下功能,仅支持DIB部分的位图文件。它们是:
GetBitsGetColorTable,GetMaxColorTableEntries,GetPitch,GetPixelAddress,IsIndexed,SetColorTable .
我们可以通过CImage类中的IsDIBSection()函数来帮助我们判断一个位图文件是否是DIB部分,定义如下:
应该注意,CImage不能被选择到新的CDC(设备上下文设备描述表的类),并且CImage将为映像创建它自己的HDC(设备描述表DC的句柄)。因为一个HBITMAP只能选进一个HDC一次,也就是说这个和CImage相关的HBITMAP不能选进另一个HDC。
如果我们需要一个CDC,可以从CImage中获取HDC,然后使用CDC: fromhandle函数。
其实目前都是WindowsXP以上的操作系统,了解一下这个知识点还是可以的。
2定义一个CImage类对象,然后调用CImage:Load方法加载外部图像文件。Load方法有以下两种重载:
在上面Draw函数的各种重载中,对于没有指定源矩形的版本,整个源图像都是默认的源矩形。如果未指定目标矩形大小,则源图片的大小是默认的目标矩形大小。
注意,Draw方法集成了StretchBlt、TransparentBlt和AlphaBlend函数。通常,Draw()函数与StretchBlt()函数相同。但是当我们的图像中存在透明色和alpha通道时,Draw()函数与TransparentBlt()或AlphaBlend()函数是相同的。所以一般情况下,我们尽量调用Draw方法来绘制图像。
我把CImage类的所有功能按照功能分为四类,这样我们可以更好的了解每个功能的定位和作用,也方便大家查阅:
1功能是创建、连接和释放的功能。
CreateEX创建DIB零件的位图(带有额外的参数),并将其附加到之前创建的CImage对象。
将位图从源矩形复制到目标矩形。此函数扩展或拉伸位图以适合目标矩形的大小。如果需要,它将处理Alpha值和透明色。
PlgBlt执行从源设备描述表的矩形到目标设备描述表的平行四边形的块位图转换。
SetTransparentColor设置将被视为透明色的颜色的索引值(调色板中只能选择一种颜色)。
StretchBlt将位图从源矩形复制到目标矩形。如有必要,该函数将拉伸位图以适合目标矩形的大小。
我们知道,CImage支持透明PNG映射,所以我们会用透明PNG映射来代替之前的蒙版操作映射。
第一步
这次选材很广,没有很多透明操作需要自己的美术功底或者有艺术感的童鞋来支撑的限制。
第二步
用photoshop等图像处理软件抠图onion.bmp,去掉红黄背景图像,用透明图层替换背景图像,然后调整图像大小为85x113,以png格式输出。结果如下:
加工图洋葱. png85x113
第三步
把bg.bmp和onion.png放在项目目录下,把代码写在源文件里运行。
这段代码和Note 6中的代码基本相同,只是把Note 6中使用蒙版操作透明处理的方式换成了png透明映射的方式,更加直观易懂。
最终效果图如下:
我们可以改变CImage:Draw函数的参数值,使“洋葱”出现在地图上的不同地方。
本节笔记到此结束。因为最近在做纯flash网站,更新速度和评论的回复不如平时及时。希望你能理解。
请点击此处下载本节注释的源代码:[Visual C] Code _ Note _ 14
感谢一直支持[VisualC]游戏开发笔记系列专栏的朋友们,也请继续关注我的专栏。我一有时间就把我的学习经验和我认为比较好的知识点写出来和大家分享。
要精通游戏开发还有很长的路要走。非常希望能和大家交流,一起学习,一起进步。
如果你看完之后觉得值得一读,可以置顶这篇文章。你们的支持是我继续写下去的动力~
文章如有遗漏,请指正。也希望大家可以多留言和我一起探讨编程相关的问题。
最后,感谢大家一直以来的支持~ ~ ~
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。