2009-08-12 75 views
13

在GTK中,如何縮放圖像?現在我用PIL加載圖像並預先縮放它們,但是有沒有辦法用GTK來做到這一點?在GTK中縮放圖像

回答

15

負載使用gtk.gdk.Pixbuf該文件中的圖像:

import gtk 
pixbuf = gtk.gdk.pixbuf_new_from_file('/path/to/the/image.png') 

那麼它的規模:

pixbuf = pixbuf.scale_simple(width, height, gtk.gdk.INTERP_BILINEAR) 

然後,如果你想在一個gtk.Image使用它,創建小部件並設置pixbuf中的圖像。

image = gkt.Image() 
image.set_from_pixbuf(pixbuf) 

或者可能以直接的方式:

image = gtk.image_new_from_pixbuf(pixbuf) 
+0

我們能在C這種解決方案也....我期待的一樣的東西,但C和GTK +下....使用GtkImage * image = gtk_image_new_from_file() – User7723337

6

這可能是更加有效載荷之前,簡單地按比例它們。我特別這麼認爲,因爲我使用這些函數從有時非常大的JPEG中加載96x96縮略圖,但仍然非常快。

gtk.gdk.pixbuf_new_from_file_at_scale(..) 
gtk.gdk.pixbuf_new_from_file_at_size(..) 
1

從URL縮放圖像。 (scale reference

import pygtk 
pygtk.require('2.0') 
import gtk 
import urllib2 

class MainWin: 

    def destroy(self, widget, data=None): 
     print "destroy signal occurred" 
     gtk.main_quit() 

    def __init__(self): 
     self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     self.window.connect("destroy", self.destroy) 
     self.window.set_border_width(10) 
     self.image=gtk.Image() 

     self.response=urllib2.urlopen(
      'http://192.168.1.11/video/1024x768.jpeg') 

     self.loader=gtk.gdk.PixbufLoader()   
     self.loader.set_size(200, 100) 
     #### works but throwing: glib.GError: Unrecognized image file format  
     self.loader.write(self.response.read()) 
     self.loader.close() 
     self.image.set_from_pixbuf(self.loader.get_pixbuf()) 

     self.window.add(self.image) 
     self.image.show() 


     self.window.show() 

    def main(self): 
     gtk.main() 

if __name__ == "__main__": 
    MainWin().main() 

* 編輯:(打補丁)*

try: 
    self.loader=gtk.gdk.PixbufLoader()   
    self.loader.set_size(200, 100) 

      # ignore tihs: 
      # glib.GError: Unrecognized image file format  

    self.loader.write(self.response.read()) 
    self.loader.close() 
    self.image.set_from_pixbuf(self.loader.get_pixbuf()) 

except Exception, err: 
    print err 
    pass