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