[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [dennou-ruby:001251] Gtk image graphics
西澤です。
> 手元にあるデータは、2次元(256*256)の数値データで値は整数2バイト
> 分です。これを白黒かなにか適当なカラーマッピングで pixmap にして
> 表示したいというわけです。どうやら、gdk_pixmap_create_from_data
> (Ruby/GtkではGdk::Pixmap.create_from_data)を使えば良さそうなの
> ですが、使い方が良くわかりません。
Ruby-Gnome のメーリングリストで聞いてみました。
gdk_pixmap_create_from_dataですが
1ピクセル当り1ビットのデータしただめみたいです。<- XMBデータ
できるのはPixmapですが2色のみです。
depth : the depth (number of bits per pixel) of the new pixmap.
はもとのデータとは関係ないみたいです。
作られるPixmapのdepthです。
表示するためにはwindowと同じ値にする必要があるみたいです。(24 or 32)
fg,bgはデータの1がfgの色、0がbgの色になります。
require "gtk"
data = [
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xf0, 0x3f, 0x00, 0xe0, 0x78, 0x00, 0xe0, 0x70, 0x00, 0xe0, 0x70, 0x00,
0xe0, 0x38, 0x00, 0xe0, 0x1f, 0x00, 0xe0, 0x1d, 0x00, 0xe0, 0x38, 0x00,
0xe0, 0x78, 0x00, 0xe0, 0xf0, 0x00, 0xf0, 0xf3, 0x01, 0xf0, 0xe3, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00].pack("c*")
window = Gtk::Window.new
window.set_usize(28,24)
window.set_app_paintable(true)
window.realize
red = Gdk::Color.new(65535, 0, 0)
green = Gdk::Color.new(0, 65535, 0)
colormap = Gdk::Colormap.get_system
colormap.alloc_color(red, false, true)
colormap.alloc_color(green, false, true)
pixmap = Gdk::Pixmap.create_from_data(window.window, data, 24, 20, 24, red, green)
gc = Gdk::GC.new(window.window)
window.signal_connect("expose_event"){|widget, evt|
widget.window.draw_pixmap(gc, pixmap, 0, 0, 2, 2, -1, -1)
}
window.show_all
Gtk.main
----------
Seiya Nishizawa
seiya@xxxxxx