[Armadillo:06704] Re: GDK 画像表示の縮小でのメモリ問題

MasakiAoyama email@hidden
2011年 2月 2日 (水) 09:28:48 JST


青山です。

> これだと、expose_event に渡される pixbuf は、一時的なバッファ用の
> pixbuf ではなく、image.xpm から生成されたものになりますよ?
> 
> g_pixbuf_base_image と pixbuf の関係は、どうなっているでしょうか?

どうも失礼しました!ミスってましたね。

g_pixbuf_base_image = gdk_pixbuf_new_from_file("image.xpm", &err);
pixbuf = gdk_pixbuf_scale_simple( g_pixbuf_base_image, 
                   width, height, GDK_INTERP_NEAREST );
g_signal_connect (GTK_OBJECT (drawing_area), "expose_event", 
 					GTK_SIGNAL_FUNC(expose_event), pixbuf);

こんな感じにしています。
pixbufは書き換え前提の領域で、一番最初は縮小表示版を作成してpixbufを
用意してます。

> 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のデータ自体のコピーが発生しないので良いです。

なるほど、参考になります。
ありがとうございました。

以上


Yasushi SHOJI <email@hidden> wrote:

> 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 mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo


----------------------------------
株式会社 レイトロン 新事業推進部
 青山 真樹  email@hidden




armadillo メーリングリストの案内