Get pixel colors of tkinter canvas

回眸只為那壹抹淺笑 提交于 2019-12-17 20:28:12

问题


I'd like to be able to create and interact with a Tkinter Canvas and, at any time, be able to iterate over each of its pixels and get their RGB values. Setting pixel by pixel is not necessary, just getting. However, methods analogous to Canvas's create_polygon(), create_line(), create_text(), and create_oval() must be available as well for interacting with the image overall.

There are a number of restraints:

  • Must work with Python 3
  • Must work with Linux, Mac, and Windows
  • Must work with libraries that come with Python (no downloads)

The second restraint is mainly the reason I've posted this question when getting the color of pixels on the screen in Python3.x and several other similar questions already exist.

If this is impossible, what is the closest I can get?


回答1:


It's not possible. The canvas doesn't work that way.

If you're not interested in setting, you can use an image rather than a canvas. You can get the value of individual pixels in a PhotoImage.




回答2:


Try it. But is slow :/

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"


来源:https://stackoverflow.com/questions/28014347/get-pixel-colors-of-tkinter-canvas

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!