2015-03-15 15 views

Trả lời

10

Từ số documentation,

The get_pixbuf() method gets the gtk.gdk.Pixbuf being displayed by the gtk.Image . The return value may be None if no image data is set. If the storage type of the image is not either gtk.IMAGE_EMPTY or gtk.IMAGE_PIXBUF the ValueError exception will be raised.

(tôi nhấn mạnh)

Như bạn cần một png tập tin, Bạn có thể làm theo hướng dẫn từ here

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

này sẽ tạo ra một pixbuf từ pixmap của bạn mà là disp.pixmap. Điều này có thể được lưu sau này bằng cách sử dụng pixbuf.save

3

Trong khi chờ đợi câu trả lời tôi thực sự tìm thấy giải pháp

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

giả disp.pixmap được đối tượng pixmap của bạn

4

Trong những trường hợp này, bạn nên đọc tài liệu từ chính Gtk, thay vì PyGtk, vì chúng hoàn chỉnh hơn.

Trong trường hợp này các chức năng có liên quan gtk_image_set_from_pixmap()gtk_image_get_pixbuf():

Gets the GdkPixbuf being displayed by the GtkImage. The storage type of the image must be GTK_IMAGE_EMPTY or GTK_IMAGE_PIXBUF.

Vấn đề là widget GtkImage có thể chứa cả một GdkPixbuf, một GdkPixmap, một GdkImage ... nhưng nó không thể chuyển đổi giữa chúng, nghĩa là, bạn chỉ có thể khôi phục những gì bạn đã lưu trữ.

Bạn đang lưu trữ một bản đồ pixmap và cố gắng để có được một pixbuf, và điều đó sẽ không hoạt động. Bây giờ, giải pháp là gì? Điều đó phụ thuộc vào những gì bạn đang cố gắng làm chính xác. Có lẽ nó là đủ nếu bạn chuyển đổi nó thành một pixbuf với gtk.pixbuf.get_from_drawable():

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') 
Các vấn đề liên quan