获取 tkinter 画布中像素的颜色

3
我希望能够创建和交互Tkinter画布,并随时能够迭代每个像素并获取它们的RGB值。不需要逐个设置像素,只需获取即可。但是,必须提供类似于Canvas的create_polygon()、create_line()、create_text()和create_oval()方法以便与整个图像进行交互。
有一些限制:
- 必须使用Python 3; - 必须适用于Linux、Mac和Windows; - 必须使用Python自带的库(无需下载)。
第二个限制主要是我发布这个问题的原因,当在Python3.x中获取屏幕上像素的颜色和其他几个类似的问题已经存在时。
如果这是不可能的,那么我能得到的最接近的是什么?
2个回答

3
尝试一下。但是速度很慢 :/
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"

2

这是不可能的。画布无法实现这种功能。

如果您不想设置,可以使用图像而非画布。您可以在PhotoImage中获取单个像素的值。


我想这样做,但我仍然需要能够使用Canvas类提供的一些方法与图像进行交互。对于我的问题缺乏清晰度,我深表歉意;已经进行了编辑。 - C0urante

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接