Python 在Gtk+;中绘制图像的最快方法是什么;?

Python 在Gtk+;中绘制图像的最快方法是什么;?,python,gtk,pygtk,cairo,Python,Gtk,Pygtk,Cairo,我有一个图像/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.wind

我有一个图像/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未采用显示器颜色格式造成的

我也没有成功使用Cairo,因为它似乎仅限于24/32位格式,并且没有16位格式(不支持且不推荐使用格式_RGB16_565)


除了在Gtk+中快速绘制图片,还有什么替代方法?

您真的没有生成足够的原始速度/吞吐量吗?或者只是你看到了闪烁

如果是后者,也许您应该研究双缓冲来执行更新?基本上,这个想法是绘制一个不可见的缓冲区,然后告诉图形卡使用新的缓冲区


也许可以查看此页面,其中包含一些内容。

尝试创建与绘图区域使用相同颜色贴图的Pixmap

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())

这可能值得做一些基准测试——如果你画一个小区域,它仍然很慢吗


如果是的话,在pygtk或gtk邮件列表上询问可能是值得的…

吞吐量不会闪烁。我正在尝试在OLPC上做一些交互式全屏滚动/动画,它开始的速度不是很快,而且上面有一个相当大的屏幕,它以16位运行。在SDL中做同样的事情没有问题。使用gtk.Layout并将其用于滚动是相当快的,但是通过绘制gtk.DrawingArea(稍后我可能想添加更多效果)手动进行滚动是完全不可用的。