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

标签 python gtk pygtk cairo

我有一个 image/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 位格式(不支持和弃用 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())

关于python - 在 Gtk+ 中绘制图像最快的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/959675/

相关文章:

python - 如何在 gtk.TextBuffer 中等待用户输入暂停?

python - MacOSX、Windows、Linux(Gnome) 和 python 上 GTK+ 中的状态图标

python - 如何将多个参数列表传递给@click.option

python - 克隆事件的 ipython 内核?

python - 一次替换 Pandas Series 的多个子字符串

c++ - gtkmm:在叠加层上移动日历(裁剪问题)

python - 如何使用 .query() 通过时间戳函数过滤 Pandas 数据帧

qt - 将 GLFW 和 OpenGL 用于 GUI 的限制

c - 在 gtk+ 复合小部件中的 typedef 结构 ** 上使用 g_value_get_pointer

PyGTK:动态标签包装