[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