GIF / PPM в Greyscale Converter выдает ошибку «Координаты вне диапазона» - PullRequest
0 голосов
/ 15 февраля 2019

Итак, мое текущее упражнение - программа для преобразования выбранного пользователем файла .gif или .ppm в оттенки серого.Я получил код, и из того, что я собираю, он должен работать, но при выполнении программы я получаю сообщение об ошибке.

Traceback (most recent call last):
  File ".\greyscale.py", line 54, in <module>
    main()
  File ".\greyscale.py", line 43, in main
    image2convert = convert(image2convert)
  File ".\greyscale.py", line 29, in convert
    r, g, b = image2convert.getPixel(pixelx, pixely)
  File "C:\Python37\lib\site-packages\graphics.py", line 933, in getPixel
    value = self.img.get(x,y)
  File "C:\Python37\lib\tkinter\__init__.py", line 3581, in get
    return self.tk.call(self.name, 'get', x, y)
_tkinter.TclError: pyimage1 get: coordinates out of range

Вот мой код:

#greyscale.py -- Converts an image file to greyscale

from tkinter.filedialog import askopenfilename, asksaveasfilename
from graphics import *

def displayimage(imagefile):
    #Open image to get width and height
    image2convert = Image(Point(0, 0), imagefile)
    imgwidth = image2convert.getWidth()
    imgheight = image2convert.getHeight()

    #Set window size to image size and draw image to window
    win = GraphWin("Greyscale Converter", imgwidth, imgheight)
    image2convert.move(imgwidth/2, imgheight/2)
    image2convert.draw(win)

    return image2convert, win

def convert(image2convert):
    width = image2convert.getWidth()
    height = image2convert.getHeight()

    #For each row of pixels
    for pixelx in range(width + 1):
        #For each column of pixels
        for pixely in range(height + 1):
            print(pixelx, pixely)
            #Get Pixel Colour, calculate greyscale, set Pixel to calculated colour
            r, g, b = image2convert.getPixel(pixelx, pixely)
            brightness = int(round(0.299 * r + 0.587 * g + 0.114 * b))
            image2convert.setPixel(pixelx, pixely, color_rgb(brightness, brightness, brightness))
        #See progress for each row
        update(win)
    return image2convert

def main():
    imagefile = askopenfilename(filetypes=[("GIF-Image", ".gif"), ("PPM-Image", ".ppm")])

    image2convert, win = displayimage(imagefile)

    #convert after click
    win.getMouse()
    image2convert = convert(image2convert)

    #save new image
    outFile = asksaveasfilename(image2convert)
    newImg = image2convert.save(outFile)

    #close file and window after click
    win.getMouse()
    image2convert.close()
    win.close()

main()

Получение пикселей занимаеткоординаты x и y в качестве аргумента и вывод списка значений цвета -> [r, g, b]

Я действительно не понимаю, почему это не работает, я использовал print для вывода x,Значения y каждый раз выглядят корректно:

0 0
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9
0 10
0 11
0 12
0 13
0 14
0 15
0 16
0 17
0 18
0 19
0 20
0 21
0 22
0 23
0 24
0 25
0 26
0 27
0 28
0 29
0 30
....

Таким образом, он правильно проходит через каждый пиксель в первом цикле, но затем не может получить цвета пикселей.

Есть идеи?

...