[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 メーリングリストの案内