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

2024-04-25 21:05:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个图像/pixbuf,我想把它画成gtk图纸区域并且经常刷新,所以bliting操作必须很快。简单易行:

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+中,除了快速绘制图片,还有哪些替代方法?在


Tags: 图像imageself区域gtkinitdef格式
3条回答

尝试创建与绘图区域使用相同颜色贴图的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)

然后用

^{pr2}$

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

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

也许你可以看看这个有information on double buffering的页面。在

它可能值得做一些基准-如果你画一个小面积仍然缓慢?在

如果是的话,也许值得在pygtk或gtk邮件列表上询问。。。在

相关问题 更多 >