MyException - 我的异常网
当前位置:我的异常网» VC/MFC » GDI+怎么实现图片水平翻转(镜像)

GDI+怎么实现图片水平翻转(镜像)

www.myexceptions.net  网友分享于:2013-04-10  浏览:180次
GDI+如何实现图片水平翻转(镜像)
比如我这里有一幅图
是人物跑步的图片。每一小张的大小是 64×64
例如,如果我要按下“D”键人物就向右跑。如果我按下“A”键,人物就往左跑。
但是我图片只有向右跑的这一张,也就是说,我要在程序里对图片进行水平翻转。

我查到,GDI+的Bitmap类中有个函数是:
RotateFlip(Gdiplus::RotateNoneFlipX); //这个是水平翻转

问题就来了,如果我直接用这个水平翻转,那么我图片左边的第一张就会翻转到右边第一张。左边第二张就会到右边第二张......
那我之后载入图片就要判断方向,根据方向的不同来确定读取图片的X坐标。

例如,我向右跑,那么我的X值初始就要为0,然后每一次显示图片,X就要加64。
而,如果我向左跑,那么我的X值初始就要从右边开始,然后每一次X减64。

如果我还要加上人物的跳跃,攻击,蹲下等动作,这样代码量就相当大了。

我本来想用Graphics类的函数进行翻转并输出的,但貌似没查到有相关函数。
我只知道Bitmap类有翻转图像的函数。

我希望是这样。
每次读取了64×64的大小后,只翻转这一小张的图,不要把这一整张的图给翻转了。
如果能做出来,那么,我每次X值还是加64,就可以少写很多不必要的代码。


我用GDI+显示图像的函数是这样的:

pgra->DrawImage(prun,X,Y,nBmpX,0,64,64,UnitPixel);

//pgra是Graphics 类型的指针
//prun是Bitmap 类型的指针,已经载入了前面那张png图片
//X,Y是图像屏幕的位置,int型
//nBmpX,int型,是源图像的坐标值,每一次加64,就能读取下一张图



请问各位前辈有什么好方法吗?

GDI+ MFC 水平翻转

------解决方案--------------------
弄个全局变量,face_direction按一下D就是向右,按一下A就是向左,
写代码的时候判断一下就行了.
还嫌麻烦的话,把获得下一个图片的X坐标做成一个函数,get_next_x_pos(...),在这个函数里面处理向左还是向右.
你的跑,跳,蹲这些方法只管调用它,不管方向,保证拿到的肯定是正确的图像就行了.

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有