2009-08-12 16 views
13

Wie kann ich in GTK ein Bild skalieren? Momentan lade ich Bilder mit PIL und skaliere sie vorher, aber gibt es eine Möglichkeit, es mit GTK zu machen?Skalieren eines Bildes in GTK

Antwort

15

Legen Sie das Bild aus einer Datei, die mit gtk.gdk.Pixbuf für:

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

es dann maßstabs:

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

Dann, wenn Sie es in einem gtk.Image verwenden möchten, Kiste das Widget und setze das Bild aus dem Pixbuf.

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

Oder vielleicht auf direktem Weg:

image = gtk.image_new_from_pixbuf(pixbuf) 
+0

Können wir diese Lösung in C haben auch .... Ich bin für gleiches Material suchen, aber unter C und GTK + .... Mit GtkImage * image = gtk_image_new_from_file() – User7723337

6

Es könnte effektiver sein, sie einfach vor dem Laden zu skalieren. Ich denke besonders, da ich diese Funktionen verwende, um 96x96 Thumbnails von manchmal sehr großen JPEGs zu laden, immer noch sehr schnell.

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

Skala Bild von 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() 

* EDIT: (ausrechnen fix) *

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