我想优化我的 cairo 绘图。我有一个不变的背景,在其上绘制了开罗图形。类的每个实例的背景可能不同,因此它不能是静态文件。要绘制背景,我想做这样的事情:
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
但不显示背景。
我究竟做错了什么?