Я сделал программу Python, которая рисует черный прямоугольник с белым кругом внутри, когда я нажимаю на кнопку. Я использую Gtk.DrawingArea
и cairo.ImageSurface
. Код следующий.Как я могу получить пиксели от cairo.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()
Получаю следующее окно.
Он отлично работает, но мне нужно, чтобы получить значение RGB пикселов этого изображения, так что я пытался делать map(ord, self.surface.get_data())
, но я получаю список нулей.
Как я могу получить список с RGB пикселей?
У меня есть еще одна проблема: когда я сворачиваю окно или перехожу в другое окно, рисунок стирается. Можно ли это избежать?