1

我想优化我的 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

但不显示背景。

我究竟做错了什么?

4

1 回答 1

1

正如 Uli 指出的那样,您正在使用指向您的小部件的上下文作为目标进行绘制,而不是您的 pixbuf。要为 pixbuf 创建新的 cairo 上下文,请使用cairo_create。画完后别忘了销毁它。

于 2013-03-01T11:02:05.123 回答