嗨,我正在尝试使用我的代码,似乎无法真正弄清楚如何将我的代码的一部分变成灰度。这是我的代码:

def grayScale(picture):
      xstop=getWidth(picture)/2
      ystop=getHeight(picture)/2
      for x in range(0,xstop):
          for y in range(0,ystop):
          oldpixel= getPixel(picture,x,y)
          colour=getColor(oldpixel)
          newColor=(getRed(oldpixel),getGreen(oldpixel),getBlue(oldpixel))/3
          setColor(picture,(newColor,newColor,newColor))
      repaint(picture)


nP=makePicture(pickAFile())
show(nP)


感谢您的任何帮助,我们非常努力地理解这一点。再次感谢您的帮助!

显示错误:


  grayScale(nP)
  错误是:“ tuple”和“ int”
  
  参数类型不合适。
  试图用无效类型的参数调用函数。这意味着您做了一些尝试,例如尝试将字符串传递给需要整数的方法。
  请检查/ Users / enochphan / Desktop / test的第8行

最佳答案

这里有些事情会给您带来麻烦:


在y for循环之后缩进代码(我想您希望遍历所有高度)。
新颜色只是当前像素的平均值,因此您需要使用加法将它们相加,然后除以三。
setColor()需要一个像素和一个颜色对象。您要更改的像素是oldpixel,并且颜色对象是使用makeColor()创建的。


这是实现所有修复的代码:

def grayScale(picture):
      xstop=getWidth(picture)/2
      ystop=getHeight(picture)/2
      for x in range(0,xstop):
          for y in range(0,ystop):
            oldpixel= getPixel(picture,x,y)
            colour=getColor(oldpixel)
            newColor = (getRed(oldpixel)+getGreen(oldpixel)+getBlue(oldpixel))/3
            setColor(oldpixel,makeColor(newColor,newColor,newColor))
      repaint(picture)

10-08 16:15