Python Pygame-使用SurfArray(数组切片问题)将某一颜色的像素重新聚集到另一颜色

Python Pygame-使用SurfArray(数组切片问题)将某一颜色的像素重新聚集到另一颜色,python,arrays,colors,pygame,slice,Python,Arrays,Colors,Pygame,Slice,我正在尝试为一个游戏制作一个调色板交换功能,并且我正在尝试找到一种方法来将某个颜色的像素的颜色更改为另一种颜色。我在一个教程中找到了这个函数,可以使所有像素的颜色都相同: def color_surface(self,surface, red, green, blue): arr = pygame.surfarray.pixels3d(surface) arr[:,:,0] = red arr[:,:,1] = green arr[:,:,2] = blue 据

我正在尝试为一个游戏制作一个调色板交换功能,并且我正在尝试找到一种方法来将某个颜色的像素的颜色更改为另一种颜色。我在一个教程中找到了这个函数,可以使所有像素的颜色都相同:

def color_surface(self,surface, red, green, blue):
    arr = pygame.surfarray.pixels3d(surface)
    arr[:,:,0] = red
    arr[:,:,1] = green
    arr[:,:,2] = blue
据我所知,前两个索引是像素的位置,第三个是颜色通道,对吗?考虑到这一点,我在这里提出了这个函数:

def recolor(self,fromColor,toColor):
    arr = pygame.surfarray.pixels3d(self.image)
    for color in arr[:,:,0:]:
        if color == fromColor:
            color = toColor
现在,我绝对肯定我把阵列切片搞砸了。我想做的是得到一个所有像素的列表,作为一个长度为3的颜色数组,如果该数组匹配fromColor,它将切换到Color。但是它不起作用了,而且它不起作用的速度很慢。有没有更简单的方法


或者我只是完全误解了surfArray,索引并不是我所想的那样?

也许你在寻找一些不那么通用的东西,但是在
PixelArray
模块中有一种方法用于用一种颜色替换另一种颜色

arr = PixelArray(surface)
arr.replace(fromColor, toColor)
del arr
这会将曲面上的一种颜色更改为另一种颜色。
del
语句就在那里,因为否则只要存在
PixelArray
对象,曲面就会保持锁定状态


对于数组切片,a解释了语法。

很好。我不知道那是一件事。谢谢你!作为对此的更新,如果您使用的是1.9.4,您可能希望使用
arr.close()
,而不是直接删除PixelArray对象。