为什么会收到“索引超出范围错误”?

时间:2019-08-18 11:58:42

标签: python processing

当我在Processing.py中运行以下代码时,出现索引超出范围错误,并且我无法弄清原因。感谢所有帮助。

x = 0
y = 0
rand = random(255)

def setup():
   size(200, 200)


def draw():
    global x, y, rand
    loadPixels()
    for i in range(0, width):
        x += 1
        for j in range(0, height):
            y += 1
            index = (x + y*width)*4
            pixels[index + 0] = color(rand)
            pixels[index + 1] = color(rand)
            pixels[index + 2] = color(rand)
            pixels[index + 3] = color(rand)
    updatePixels()

1 个答案:

答案 0 :(得分:0)

您会收到超出范围的错误,因为xy从未重置为0,并且在pixels[]字段中,每个颜色通道都没有一个元素,因此每个像素一个color()元素:

index = x + y*width
pixels[index] = color(rand, rand, rand)

您必须在相应的循环之前设置x=0y=0,并在循环结束时增加xy

def draw():
    global x, y, rand
    loadPixels()
    x = 0 
    for i in range(0, width):
        y = 0
        for j in range(0, height):
            index = x + y*width
            pixels[index] = color(rand, rand, rand)
            y += 1
        x += 1
    updatePixels()

如果要为每个像素生成随机颜色,则必须使用为每个像素的每个颜色通道生成随机值:

pixels[index] = color(random(255), random(255), random(255))

pixels[index] = color(*(random(255) for _ in range(3)))

进一步可以简化代码。您可以直接使用ij来代替xy。例如:

def draw():
    loadPixels()
    for x in range(width):
        for y in range(height):
            pixels[y*width + x] = color(random(255), random(255), random(255))
    updatePixels()