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(...),在这个函数里面处理向左还是向右.
你的跑,跳,蹲这些方法只管调用它,不管方向,保证拿到的肯定是正确的图像就行了.