我想优化我的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
但没有显示背景。
我做错了什么?
答案 0 :(得分:1)
正如Uli指出的那样,你正在绘制指向你的小部件作为目标的上下文,而不是你的pixbuf。要为pixbuf创建新的cairo上下文,请使用cairo_create。你完成绘画时不要忘记毁掉它。