Я хочу оптимизировать свой рисунок каира. У меня неизменный фон, поверх которого нарисована каирская графика. Фон может быть разным для каждого экземпляра класса, поэтому он не может быть статическим файлом. Чтобы нарисовать фон, я хотел бы сделать что-то вроде этого:
if self.pixbuf is None:
self.pixbuf = self.draw_background(cr, width, height)
#self.pixbuf = gtk.gdk.pixbuf_new_from_file("/path/to/file.png")
cr.set_source_pixbuf(self.pixbuf, 0, 0)
cr.paint()
Так что я создаю фон только один раз, а затем отображаю его как изображение и рисую поверх него. Это делается для экономии времени, вместо того, чтобы перерисовывать весь неизменный фон каждый раз, когда кто-то другой меняется. Закомментированная строка кода работает нормально, но я действительно не хочу создавать png, сохранять его во временный файл, а затем загружать этот файл. Это похоже на пустую трату IO.
Я пробовал это:
self draw_background (self, cr, width, height)
pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, int(width), int(height))
cr.set_source_color(gtk.gdk.color_parse('black'))
cr.set_line_width(2)
cr.rectangle(0, 0, width, height)
cr.stroke()
cr.paint()
return pixbuf
Но фон не отображается.
Что я делаю неправильно?
gtk.gdk.pixbuf_get_from_surface, которого нет в моей системе (pygtk v2.24). У вас есть фрагмент кода, на который я мог бы взглянуть? - person Sardathrion - against SE abuse   schedule 25.02.2013