gpt4 book ai didi

python - Pygame - 使用 SurfArray 将某种颜色的像素重新着色为另一种颜色(数组切片问题)

转载 作者:太空宇宙 更新时间:2023-11-04 03:35:02 26 4
gpt4 key购买 nike

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

def color_surface(self,surface, red, green, blue):
arr = pygame.surfarray.pixels3d(surface)
arr[:,:,0] = red
arr[:,:,1] = green
arr[:,:,2] = blue

据我所知,前两个索引是像素的位置,第三个是颜色 channel ,对吗?考虑到这一点,我想出了这个功能:

def recolor(self,fromColor,toColor):
arr = pygame.surfarray.pixels3d(self.image)
for color in arr[:,:,0:]:
if color == fromColor:
color = toColor

现在,我绝对确定我弄乱了数组切片。我想要做的是将所有像素的列表作为长度为 3 的颜色数组获取,如果该数组与 fromColor 匹配,它就会切换到 toColor。但是,它不工作,而且不工作的速度非常慢。有没有更简单的方法?

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

最佳答案

也许您正在寻找不太笼统的东西,但有一个 replace PixelArray 模块中的方法,用于将一种颜色替换为另一种颜色。

arr = PixelArray(surface)
arr.replace(fromColor, toColor)
del arr

这会将表面上的一种颜色更改为另一种颜色。 del 语句在那里,否则只要 PixelArray 对象存在,表面就会保持锁定状态。

至于数组切片,一个section in the NumPy documentation解释语法。

关于python - Pygame - 使用 SurfArray 将某种颜色的像素重新着色为另一种颜色(数组切片问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29479915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com