2015-06-04 3 views
2

Я сделал программу 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() 

Получаю следующее окно.

enter image description here

Он отлично работает, но мне нужно, чтобы получить значение RGB пикселов этого изображения, так что я пытался делать map(ord, self.surface.get_data()), но я получаю список нулей.

Как я могу получить список с RGB пикселей?

У меня есть еще одна проблема: когда я сворачиваю окно или перехожу в другое окно, рисунок стирается. Можно ли это избежать?

ответ

0

я не знаю о том, чтобы ваш цвет, но о чертеже, соединить окно с «Configure-событие» (событие является состояние окна изменилось), а затем вызвать drawingarea.queue_draw()

Смежные вопросы