题
我有一个图像/ PIXBUF我想要绘制成gtk.DrawingArea和频繁刷新,所以Blitting操作要快。这样做的简单的方法:
def __init__(self):
self.drawing_area = gtk.DrawingArea()
self.image = gtk.gdk.pixbuf_new_from_file("image.png")
def area_expose_cb(self, area, event):
self.drawing_area.window.draw_pixbuf(self.gc, self.image, 0, 0, x, y)
但是导致非常慢的性能,有可能通过在显示器的彩色格式不是所述PIXBUF中引起的。
我与开罗没有成功或者,因为它似乎限于24位/ 32位格式和不具有16位格式(FORMAT_RGB16_565不受支持,建议使用)。
什么选择在那里GTK中迅速画画+?
解决方案
尝试创建使用相同的颜色表作为绘图区域像素图。
dr_area.realize()
self.gc = dr_area.get_style().fg_gc[gtk.STATE_NORMAL]
img = gtk.gdk.pixbuf_new_from_file("image.png")
self.image = gtk.gdk.Pixmap(dr_area.window, img.get_width(), img.get_height())
self.image.draw_pixbuf(self.gc, img, 0, 0, 0, 0)
和使用它绘制到屏幕
dr_area.window.draw_drawable(self.gc, self.image, 0, 0, x, y, *self.image.get_size())
其他提示
您真的不产生足够的原始速度/吞吐量?或者它只是你看到的闪烁?
如果是后者,也许你应该调查双缓冲perfomring您的更新呢?基本想法是绘制到一个不可见的缓冲器然后告诉图形卡以使用新的缓冲区。
也许检查此页面,其具有双缓冲一个一些信息>
这可能是值得做一些基准测试 - 如果你用小面积画是它仍然缓慢
如果它是,它可能是值得问上pygtk的或GTK邮件列表...
不隶属于 StackOverflow