pygame chop函数的一些理解,欢迎指正

时间:2024-03-14 15:15:31

初学pygame,看到了chop函数,于是找了一张图试了一下,发现按照网上说的和我实际出来的好像有点儿不一样,所以发一下,如果不对,欢迎指正



pygame.transform.chop(surface,rect)



函数原型,rect是截取的区域,返回的应该是出去截取部分剩下的部分,如下图:

pygame chop函数的一些理解,欢迎指正


然后就是关于这个矩形到底是怎么裁剪的,网上没有太多明说,我一开始以为后面两个是长度和宽度,但是好像不对,如下图所示:


pygame chop函数的一些理解,欢迎指正

这两张图分别是[0, 0, 40, 0]和[0, 0, 40, 30]


pygame chop函数的一些理解,欢迎指正

这是原图,如果按照常规理解的化,那么剩下的不可能仅仅是右边,而且[0,0,40,30]也不可能把右边上半部分截取掉

那么有一个猜测就是[x,y,w,h]是分开来算的,x和w是一对,y和h为一对,第一个矩形x+w为长度、画面高为高进行截取,第二个矩形y+h为高,画面长度为长度进行截取,截取完了之后剩下的部分组成一个矩形


pygame chop函数的一些理解,欢迎指正

可以看出跟原图对比,水平的红线没有了,右边的灰色区域整体没有了,如果只是截取30,30为远点,长10宽10区域的化,最后组成的矩形不可能没有水平的红线(其实我也不明白为什么扣掉一块儿以后还得组成一个矩形)


再反证一下,我想要留下图形下面的部分:如果按照网上给的定义,那么我应该设置RECT为[0,30,60,80](图片本身长为60,宽没细看,但是30肯定是可以截取到中上了) 那么我们运行一下

pygame chop函数的一些理解,欢迎指正

什么都没有,那么我们按照上面的猜测去设置一下,也就是说我要下半部分的话,那么x+w为长度的矩形我们不能截取设置为0,0,y+h为高的矩形我们设置0,20,即[0,0,0,30]


pygame chop函数的一些理解,欢迎指正


运行效果与我们的猜想一样,如果想保留下半部分的又半部分那么只需要把x+w为长度的矩形截掉一部分就可以了,例如设置为[0,0,20,30]


pygame chop函数的一些理解,欢迎指正

与我们的预期一样~


画个容易懂的例子:


pygame chop函数的一些理解,欢迎指正


假设[x,y,w,h]中x和y都是0,那么没有画线的部分为最后显示再屏幕上面的部分(这里面的矩形值应该是相对于图片的,个人认为,因为传入的是待剪切的图片)


还有,这玩意儿有法看源码吗,没找到源码,不知道到底怎么执行的~如果有真正了解的朋友留下言告诉我是不是这个意思,或者给我一些指正~