gtk2,gtk3 で 画像(Gtk::Image,Gdk::Pixbuf)や周期的呼び出し(Gtk.timeout_add,GLib::Timeout)でアニメーションを表示します。
1.画像を作る(読み込む、セットする)
○Gtk::Image#initialize(:stock => nil, :icon_name => nil, :icon_set => nil, :icon => nil, :file => nil, :pixbuf => nil, :animation => nil, :surface => nil, :size => nil)
( Gtk::Image.new(value = nil) ;gtk2 ではこれでも可)
画像(Gtk::Image)を作ります
・nil;空の Gtk::Image を作ります
・:file;ファイル名で指定された画像を読み込み Gtk::Image を作ります
・:pixbuf;GdkPixbuf の画像から Gtk::Image を作ります
・:animation;Gdk::PixbufAnimationのアニメーションから Gtk::Image を作ります
(valueの場合;:file,:pixbuf,:animation のどれかを指定する)
○Gtk::Image#pixbuf=(pixbuf)
Gtk::Image#set_pixbuf(pixbuf)
GdkPixbuf の画像をセットします
○GdkPixbuf::Pixbuf.new(:file => path)
(Gdk::Pixbuf.new(filename, width = nil, height = nil) はdeprecated)
:file;ファイル名で指定された画像を読み込み GdkPixbuf を作ります
画像をウィンドウに表示するには、Gtk::Image が必要です。
GdkPixbuf は画像ファイルを読み込んだり、加工したりするクラスです。この画像を Gtk::Image にセットします。(ただし、Gtk::Image.new(filename) でも画像ファイルを読み込むことができます。)
画像ファイルのフォーマットは、一般的な .jpg、.bmp、.png などに対応しています。
→・5分で学ぶGTK+ - myokoym - Rabbit Slide Show
(license; public domain)
・gtk_image_1.rb
・./images/face_2.png
・./images/face_3.png
・./images/face_4.png
・./images/face_5.png
(./images/以下に face_1.png 以下を置いた時の実行結果)
2.周期的呼び出しでアニメーションにする
画像を連続して表示してアニメーションにするには、周期的呼び出しを使います
(アニメーションファイル自体は Gdk::PixbufAnimation で対応しています)
○周期的呼び出し
・GLib::Timeout.add(interval){ ... }
(Gtk.timeout_add(interval){ ... } は、deprecated)
interval;ミリ秒(1/1000秒)単位で指定
{ ... } ;ブロック(Proc など)を呼び出します(true を返すと繰り返します)
・GLib::Timeout.add_seconds(interval){ ... }
interval;秒(1秒)単位で指定
{ ... } ;ブロック(Proc など)を呼び出します(true を返すと繰り返します)
○Gtk::Image#initialize(:stock => nil, :icon_name => nil, :icon_set => nil, :icon => nil, :file => nil, :pixbuf => nil, :animation => nil, :surface => nil, :size => nil)
( Gtk::Image.new(value = nil) ;gtk2 ではこれでも可)
画像(Gtk::Image)を作ります
・nil;空の Gtk::Image を作ります
・:file;ファイル名で指定された画像を読み込み Gtk::Image を作ります
・:pixbuf;GdkPixbuf の画像から Gtk::Image を作ります
・:animation;Gdk::PixbufAnimationのアニメーションから Gtk::Image を作ります
(valueの場合;:file,:pixbuf,:animation のどれかを指定する)
○Gtk::Image#pixbuf=(pixbuf)
Gtk::Image#set_pixbuf(pixbuf)
GdkPixbuf の画像をセットします
○GdkPixbuf::Pixbuf.new(:file => path)
(Gdk::Pixbuf.new(filename, width = nil, height = nil) はdeprecated)
:file;ファイル名で指定された画像を読み込み GdkPixbuf を作ります
画像をウィンドウに表示するには、Gtk::Image が必要です。
GdkPixbuf は画像ファイルを読み込んだり、加工したりするクラスです。この画像を Gtk::Image にセットします。(ただし、Gtk::Image.new(filename) でも画像ファイルを読み込むことができます。)
画像ファイルのフォーマットは、一般的な .jpg、.bmp、.png などに対応しています。
→・5分で学ぶGTK+ - myokoym - Rabbit Slide Show
(license; public domain)
・gtk_image_1.rb
・./images/face_1.pngrequire 'gtk3'#require 'gtk2' # gtk2ライブラリでも実行可能window = Gtk::Window.newwindow.set_size_request(400, 300)image1 = Gtk::Image.new(:file => './images/face_1.png')# image1 = Gtk::Image.new('./images/face_1.png') # gtk2ではこれでも可image2 = Gtk::Image.newpixbuf_2 = GdkPixbuf::Pixbuf.new(:file => './images/face_2.png')image2.pixbuf = pixbuf_2fixed = Gtk::Fixed.newfixed.put(image1, 10, 10)fixed.put(image2, 180, 10)window.add(fixed)window.show_allwindow.signal_connect("destroy") { Gtk.main_quit }Gtk.main
・./images/face_2.png
・./images/face_3.png
・./images/face_4.png
・./images/face_5.png
(./images/以下に face_1.png 以下を置いた時の実行結果)
2.周期的呼び出しでアニメーションにする
画像を連続して表示してアニメーションにするには、周期的呼び出しを使います
(アニメーションファイル自体は Gdk::PixbufAnimation で対応しています)
○周期的呼び出し
・GLib::Timeout.add(interval){ ... }
(Gtk.timeout_add(interval){ ... } は、deprecated)
interval;ミリ秒(1/1000秒)単位で指定
{ ... } ;ブロック(Proc など)を呼び出します(true を返すと繰り返します)
・GLib::Timeout.add_seconds(interval){ ... }
interval;秒(1秒)単位で指定
{ ... } ;ブロック(Proc など)を呼び出します(true を返すと繰り返します)
require 'gtk3'#require 'gtk2' # gtk2ライブラリでも実行可能window = Gtk::Window.newwindow.set_size_request(400, 300)@image = Gtk::Image.new # 空のGtk::Imageを作成# imagesフォルダ内の画像ファイルを順次読み込んで、Pixbufを作成# @image_arrayに配列として追加していく@image_array = []Dir.glob('images/*.png').sort.each do |filename|@image_array.push(GdkPixbuf::Pixbuf.new(:file => filename))endidx = 0# 500ミリ秒ごとに周期的呼び出しGLib::Timeout.add(500) do # Gtk.timeout_addは、gtk3ではdeprecated@image.pixbuf = @image_array[idx] # @imageに@image_arrayのPixbufの画像を設定if idx < @image_array.size - 1idx += 1 # @image_arrayの画像を順番に設定elseidx = 0endtrue # 返り値がtrueでないと1回で終了endfixed = Gtk::Fixed.newfixed.put(@image, 10, 10)window.add(fixed)window.show_allwindow.signal_connect("destroy") { Gtk.main_quit }Gtk.main