-1

我试图留下三分之一的图像库存,将中间的所有黑色更改为黄色,并将底部三分之一的黑色更改为蓝色。我知道如何改变颜色,我面临的问题是我不知道如何只选择三分之一的像素来操作它们。这就是我所拥有的..

def changeSpots1():
    file = pickAFile()
    picture = makePicture(file) 
    show(picture)
    pix = getAllPixels(picture)
    for p in pix:
        intensity = (getRed(p) + getGreen(p) + getBlue(p))
        c = getColor(p)
        if (intensity < 150):              
            newColour = setColor(p, yellow)
    repaint(picture)

我正在使用一个名为 JES 的程序来编写它,以防您想知道诸如 pickAFile 之类的命令。感谢您的任何帮助!

4

1 回答 1

0

我对 JES 一无所知,但我猜它会getAllPixels按通常的顺序返回像素:第一行,然后是下一行,然后是下一行,等等。

如果是这样:

pix = getAllPixels(picture)
third = len(pix) // 3
for p in pix[:third]:
    # do top-third stuff
for p in pix[third:third*2]:
    # do middle-third stuff
for p in pix[third*2:]:
    # do bottom-third stuff

这确实假设图片可以完美地分成三部分。如果不是,您将需要知道图片的宽度,以便您可以四舍五入到最近的完整行(因为否则前三分之一可能实际上是 250 个完整行和第 251 个的前 47 个像素,看起来不太好) . 我不知道 JES 必须使用什么函数来获取宽度,但我确信它很简单。

于 2013-11-01T23:58:37.033 回答