如何创建内存中的图像

时间:2013-02-22 12:48:43

标签: python 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,将其保存到临时文件,然后加载该文件。这似乎是对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

但没有显示背景。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

正如Uli指出的那样,你正在绘制指向你的小部件作为目标的上下文,而不是你的pixbuf。要为pixbuf创建新的cairo上下文,请使用cairo_create。你完成绘画时不要忘记毁掉它。