[Armadillo:06703] Re: GDK 画像表示の縮小でのメモリ問題
Yasushi SHOJI
email@hidden
2011年 2月 1日 (火) 21:05:16 JST
At Mon, 31 Jan 2011 13:09:02 +0900,
MasakiAoyama wrote:
>
> pixbuf = gdk_pixbuf_new_from_file("image.xpm", &err);
> g_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
> GTK_SIGNAL_FUNC(expose_event), pixbuf);
> としておいて、
>
> gtk_widget_queue_draw (GTK_WIDGET(drawing_area));
> を呼んだら、
>
> gboolean expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data)
> が呼ばれて、引数dataをpixbufのポインタに入れて再描画する。という。
これだと、expose_event に渡される pixbuf は、一時的なバッファ用の
pixbuf ではなく、image.xpm から生成されたものになりますよ?
g_pixbuf_base_image と pixbuf の関係は、どうなっているでしょうか?
もし、g_pixbuf_base_image も同じように生成しているなら
g_pixbuf_base_image = gdk_pixbuf_new_from_file(".....", ...);
g = g_pixbuf_base_image; /* make variable name shorter for this mail */
pixbuf = gdk_pixbuf_new(gdk_pixbuf_get_colorspace(g),
gdk_pixbuf_get_has_alpha(g),
gdk_pixbuf_get_bits_per_sample(g), ...);
とした方が、image.xpmのデータ自体のコピーが発生しないので良いです。
GdkPixbuf *gdk_pixbuf_copy_properties_only(GdkPixbuf *pixbuf);
と、関数にしておくと使いまわせて良いかもしれません。
# gdk_pixbuf_new_with_properties()の方が良い名前か?
(こんなことは無いと思いますが、)単純に
pixbuf = g_pixbuf_base_image
としているなら、pixbuf を壊したときに g_pixbuf_base_image も壊れるので
注意が必要です。
--
yashi
armadillo メーリングリストの案内