小编ikn*_*ikn的帖子

使用Pygobject和Python 3从内存数据中显示图像

我在Python 3中有一些RGBA数据,我想在不使用任何额外库的情况下在GTK3窗口中显示它所代表的图像.

我尝试的第一件事是编辑一个Pixbuf例子中的数据(http://developer.gnome.org/gdk-pixbuf/stable/gdk-pixbuf-The-GdkPixbuf-Structure.html#put-pixel - 对不起,我使用时,(C)文档中只允许2个链接Pixbuf.get_pixels().这给了我一个不可变的bytes对象,但显然不会起作用.(gdk-pixbuf错误报告(668084,如果SO允许我将链接到它)涵盖相同的功能,但事情必须改变一点,因为.)

接下来,我尝试使用数据创建一个Pixbuf Pixbuf.new_from_data(),但这也是错误的(参见gdk-pixbuf bug 674691)(是的,那是评论3中的我).

然后我看了一下Cairo:ImageSurface.create_for_data应该这样做,但由于某种原因,这在Python 3绑定中还没有.(我已经尝试过使用Python 2,然后将表面转换为a Pixbuf,然后将其包装在一个中gtk.Image,它可以工作.但我使用的是Python3(即便如此,它也很混乱 - 毕竟Cairo是一个矢量图形库) ).

我找到了一个参考,使用PIL将图像写入PNG文件,然后将其读入Pixbuf,但这很糟糕,使用额外的库,而PIL也不适用于Python 3.

那么......还有其他方法吗?

工作代码

根据Havok的回答,这是一个有效的例子:

from array import array

from gi.repository import Gtk as gtk, GdkPixbuf

pixels = array('H')
for i in range(20):
    for j in range(20):
        px = (i < 10, j >= 10, (i < 10) ^ (j < 10))
        pixels.extend(65535 * c for c in px)

header = b'P6 …
Run Code Online (Sandbox Code Playgroud)

python pygobject python-3.x gtk3

9
推荐指数
1
解决办法
2855
查看次数

标签 统计

gtk3 ×1

pygobject ×1

python ×1

python-3.x ×1