Get pixel colors of tkinter canvas

前端 未结 2 1819
栀梦
栀梦 2020-12-11 10:27

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 pix

相关标签:
2条回答
  • 2020-12-11 11:27

    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.

    0 讨论(0)
  • 2020-12-11 11:28

    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"
    
    0 讨论(0)
提交回复
热议问题