Итак, мое текущее упражнение - программа для преобразования выбранного пользователем файла .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
....
Таким образом, он правильно проходит через каждый пиксель в первом цикле, но затем не может получить цвета пикселей.
Есть идеи?