20

GTKで、画像を拡大縮小するにはどうすればよいですか?現在、PILを使用して画像をロードし、事前に拡大縮小していますが、GTKを使用してそれを行う方法はありますか?

4

6 に答える 6

25

そのために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 = gtk.Image()
image.set_from_pixbuf(pixbuf)

または、直接的な方法で:

image = gtk.image_new_from_pixbuf(pixbuf)
于 2009-08-16T05:06:11.833 に答える
9

ロードする前に単純にスケーリングする方が効果的な場合があります。私はこれらの関数を使用して、非常に大きなJPEGから96x96のサムネイルをロードするので、特に高速だと思います。

gtk.gdk.pixbuf_new_from_file_at_scale(..)
gtk.gdk.pixbuf_new_from_file_at_size(..)
于 2009-08-20T23:55:21.737 に答える
2

URLから画像を拡大縮小します。(スケールリファレンス

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
于 2013-10-10T18:52:13.843 に答える
0

参考までに、これはウィンドウサイズに基づいて画像を拡大縮小するソリューションです(これを拡張するクラスで実装していることを意味しますGtkWindow)。

let [width, height] = this.get_size(); // Get size of GtkWindow
this._image = new GtkImage();          
let pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(filePath,width,height,true);
this._image.set_from_pixbuf(pixbuf);
于 2019-08-27T15:48:14.020 に答える
0

Cでこれをしている人は誰でもこれが行われている方法です

//ファイルを既にロードしてファイル名を保存したと仮定します//GTK_IMAGE(image)は画像を表示するために使用されるコンテナです

GdkPixbuf *pb;

pb = gdk_pixbuf_new_from_file(file_name, NULL);
pb = gdk_pixbuf_scale_simple(pb,700,700,GDK_INTERP_BILINEAR);
            gtk_image_set_from_pixbuf(GTK_IMAGE(image), pb);
于 2020-06-16T12:16:48.117 に答える
-1

実際にgdk_pixbuf_scale_simple(pb、700,700、GDK_INTERP_BILINEAR);を使用する場合 この関数をタイマーイベントとともに使用すると、メモリリークが発生します(タスクマネージャーを監視する場合、プロセスが強制終了されるまでメモリ要件が増加し続けます)。それを解決する方法

于 2020-09-22T06:42:24.733 に答える