如何创建内存中的图像
我想优化我的Cairo绘图。我的背景是固定不变的,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文件,保存到临时文件,然后再加载那个文件。这似乎浪费了输入输出的资源。
我试过这样做:
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
但是没有显示背景。
我哪里做错了?
1 个回答
1
正如Uli所说,你现在是在用指向你的控件的上下文来绘图,而不是指向你的图像缓冲区(pixbuf)。如果你想为一个图像缓冲区创建一个新的cairo上下文,可以使用cairo_create这个方法。记得在绘制完成后要销毁这个上下文哦。