如何从cairo.ImageSurface获取像素?

时间:2015-06-04 02:41:24

标签: python pygtk gtk3 cairo pycairo

我制作了一个Python程序,当我点击一个按钮时,它会在其中绘制一个带有白色圆圈的黑色矩形。我使用Gtk.DrawingAreacairo.ImageSurface。代码如下。

class App:

    def __init__(self, width, height):

        self.surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)

        # Builder
        self.builder = Gtk.Builder()
        self.builder.add_from_file('ventana.glade')
        go = self.builder.get_object

        # Widgets
        self.window      = go('window')
        self.drawingarea = go('drawingarea')
        self.button      = go('button')

        signals = {
            'gtk_main_quit'    : Gtk.main_quit,
            'draw'             : self.draw
        }

        self.builder.connect_signals(signals)
        self.window.show_all()


    def draw(self, widget):
        context = self.drawingarea.get_window().cairo_create()
        context.set_source_surface(self.surface)

        context.set_source_rgba(0.0, 0.0, 0.0, 1.0)
        context.rectangle(0, 0, self.surface.get_width(), self.surface.get_height())
        context.fill()

        context.translate(10, 10)
        context.arc(0, 0, 10, 0, 2 * pi)
        context.set_source_rgba(1.0, 1.0, 1.0, 1.0)
        context.fill()

我得到以下窗口。

enter image description here

它运行正常,但我需要获取该图片像素的RGB值,所以我尝试了map(ord, self.surface.get_data()),但我得到了一个零列表。

如何获得包含像素RGB的列表?

我还有另一个问题:当我最小化窗口或更改到另一个窗口时,图形会消失。有可能避免这种情况吗?

1 个答案:

答案 0 :(得分:0)

我不知道如何获取你的颜色,而是关于绘图,将你的窗口连接到' configure-event' (事件是窗口状态发生变化)然后调用drawingarea.queue_draw()