2015-01-18 2 views
2

Я хотел бы иметь возможность создавать и взаимодействовать с Tkinter Canvas и в любое время иметь возможность перебирать каждый из своих пикселей и получать их значения RGB. Настройка пикселя по пикселю не требуется, просто получение. Тем не менее, методы, аналогичные Canvas create_polygon(), create_line(), create_text() и create_oval(), также должны быть доступны для взаимодействия с изображением в целом.Получить пиксельные цвета холста tkinter

Есть целый ряд ограничений:

  • должны работать с Python 3
  • должны работать с Linux, Mac и Windows,
  • должны работать с библиотеками, которые поставляются с Python (без загрузки)

Второй сдержанность в основном является причиной того, что я опубликовал этот вопрос, когда getting the color of pixels on the screen in Python3.x и еще несколько подобных вопросов уже существуют.

Если это невозможно, что ближайшего я могу получить?

ответ

2

Невозможно. Холст не работает таким образом.

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

+0

Я бы хотел, но мне все же нужно иметь возможность взаимодействовать с изображением с помощью некоторых методов, предоставляемых классом Canvas. Извините за отсутствие ясности в моем вопросе; были сделаны изменения. – C0urante

0

Попробуйте. Но медленный:/

from util.color import Color 


class ImageUtils: 

    @staticmethod 
    def get_pixels_of(canvas): 
     width = int(canvas["width"]) 
     height = int(canvas["height"]) 
     colors = [] 

     for x in range(width): 
      column = [] 
      for y in range(height): 
       column.append(ImageUtils.get_pixel_color(canvas, x, y)) 
      colors.append(column) 

     return colors 

    @staticmethod 
    def get_pixel_color(canvas, x, y): 
     ids = canvas.find_overlapping(x, y, x, y) 

     if len(ids) > 0: 
      index = ids[-1] 
      color = canvas.itemcget(index, "fill") 
      color = color.upper() 
      if color != '': 
       return Color[color.upper()] 

     return "WHITE" 
Смежные вопросы