2009-08-12 8 views
13

Trong GTK, làm cách nào để chia tỷ lệ hình ảnh? Ngay bây giờ tôi tải hình ảnh với PIL và quy mô chúng trước, nhưng có cách nào để làm điều đó với GTK?Quy mô hình ảnh trong GTK

Trả lời

15

tải hình ảnh từ một tập tin sử dụng gtk.gdk.Pixbuf cho rằng:

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

sau đó mở rộng nó:

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

Sau đó, nếu bạn muốn sử dụng nó trong một gtk.Image, crate các widget và thiết lập hình ảnh từ pixbuf.

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

Hoặc có thể theo một cách trực tiếp:

image = gtk.image_new_from_pixbuf(pixbuf) 
+0

Chúng ta có thể có giải pháp này trong C cũng .... tôi đang tìm kiếm cùng một thứ nhưng dưới C và GTK + .... Sử dụng GtkImage * image = gtk_image_new_from_file() – User7723337

6

Nó có thể là hiệu quả hơn chỉ đơn giản là mở rộng quy mô chúng trước khi tải. Tôi đặc biệt nghĩ như vậy kể từ khi tôi sử dụng các chức năng này để tải trong hình thu nhỏ 96x96 từ đôi khi JPEG rất lớn, vẫn còn rất nhanh.

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

Tỷ lệ hình ảnh từ 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: (làm việc ra sửa chữa) *

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