2009-08-12 23 views
13

En GTK, ¿cómo puedo escalar una imagen? En este momento, cargo imágenes con PIL y las escaloo de antemano, pero ¿hay alguna manera de hacerlo con GTK?Escalar una imagen en GTK

Respuesta

15

cargar la imagen desde un archivo usando gtk.gdk.Pixbuf para ello:

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

continuación escala que:

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

Entonces, si desea utilizarlo en un gtk.Image, carga el widget y configura la imagen desde el pixbuf.

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

O tal vez de una manera directa:

image = gtk.image_new_from_pixbuf(pixbuf) 
+0

Podemos tener esta solución en C también .... busco el mismo material, pero en C y GTK + .... Usando GtkImage * image = gtk_image_new_from_file() – User7723337

6

Podría ser más eficaz simplemente para ampliar su escala antes de la carga. Especialmente lo pienso desde que utilizo estas funciones para cargar miniaturas de 96x96 desde archivos JPEG a veces muy grandes, aún muy rápido.

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

Escale la imagen de la 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: (hacer ejercicio 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 
Cuestiones relacionadas