如何将像素图保存为 .png 文件?
我这样做:
image = gtk.Image()
image.set_from_pixmap(disp.pixmap, disp.mask)
pixbf=image.get_pixbuf()
pixbf.save('path.png')
我收到此错误:
pixbf=image.get_pixbuf()
ValueError: image should be a GdkPixbuf or empty
从文档中,
该
get_pixbuf()方法获取gtk.gdk.Pixbuf正在显示的gtk.Image. 如果没有设置图像数据,则该return值可能是。None如果图像的存储类型不是,gtk.IMAGE_EMPTY否则gtk.IMAGE_PIXBUF将引发ValueError 异常。
(强调我的)
由于您需要png文件,您可以按照此处的说明进行操作
pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,has_alpha=False, bits_per_sample=8, width=width, height=height)
pixbuf.get_from_drawable(disp.pixmap, disp.pixmap.get_colormap(), 0, 0, 0, 0, width, height)
pixbuf.save('path.png')
pixbuf这将从您的pixmapwhich is创建一个disp.pixmap。这可以稍后保存使用pixbuf.save
在这些情况下,从 Gtk 本身而不是 PyGtk 中阅读文档会很有用,因为它们更完整。
在这种情况下,相关函数是gtk_image_set_from_pixmap()和gtk_image_get_pixbuf():
获取 GtkImage 正在显示的 GdkPixbuf。图片的存储类型必须为 GTK_IMAGE_EMPTY 或 GTK_IMAGE_PIXBUF。
问题是GtkImage小部件可以同时保存 a GdkPixbuf, a GdkPixmap, a GdkImage... 但它不能在它们之间转换,也就是说,您只能恢复您存储的内容。
您正在存储一个像素图并尝试获取一个像素缓冲区,但这是行不通的。现在,解决方案是什么?这取决于你想要做什么。如果您使用gtk.pixbuf.get_from_drawable()将其转换为 pixbuf 可能就足够了:
w,h = disp.pixmap.get_size()
pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, w, h)
pb.get_from_drawable(disp.pixmap, disp.pixmap.get_colormap(),
0, 0, 0, 0, width, height)
pb.save('path.png')
在等待答案时,我实际上找到了解决方案
pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, width, height)
pixbf = pixbuf.get_from_drawable(disp.pixmap, disp.pixmap.get_colormap(), 0, 0, 0, 0, width, height)
pixbf.save('path.png')
假设 disp.pixmap 是您的像素图对象