[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[mgp-users-jp 00730] Re: transparent gif/png
- To: mgp-users-jp@mew.org
- Subject: [mgp-users-jp 00730] Re: transparent gif/png
- From: TATEOKA Takamichi <tate@cs.uec.ac.jp>
- Date: Sun, 23 Jul 2000 16:16:00 +0900
- In-reply-to: <>
- Posted: Sun, 23 Jul 2000 16:16:01 +0900
- References: <> <>
- Reply-to: mgp-users-jp@mew.org
楯岡@電通大です。
From: Jun-ichiro itojun Hagino <itojun@itojun.org>
> > - 透過 gif の表示が非常に遅い
> >です。
>
> だいぶ忘れてるので違うかもしれないけど、
> 背景との関係から、1pixelづつ色を考えないといけないからです。
ちょっと追ってみました。確かにすごい計算量の増加ですが、最近の CPU
だとどうってことないようです。(^^;
むしろ、今回の問題は libungif の中の DGifDecompressLine() の中で時間
を食っているようでした。今更 gif という意識もあって libungif の中まで
は追いかけませんでした。
convert のかわりに ppmtogif + giftrans を使って透過 gif を作ったとこ
ろ、一瞬で表示されるようになりました。この差も追ってません、ごめんなさ
い。
ただ、同じ透過 gif でも、background color が transparent color と一
緒でないとうまく透過できないようです。これは、gifLoad():image/gif.c の
if (trans)
image->trans = GifFile->SBackGroundColor;
で透過色として Extension block の中の transparent color index が差す色
ではなく、background color を入れている為のようです。
mgp 側を直す根性がなかったので、
% ppmtogif <hoge.ppm | giftrans -b white -t white >hoge.gif
として background color と transparent color を一致させて解決しました。
透過 png の方はちょっと追い切れませんでした。一箇所だけバグの元にな
りそうな部分を見つけたので、それだけ送っておきます。
BEGIN--- cut here ---
*** image/png.c.DIST Tue Jun 13 13:46:17 2000
--- image/png.c Sun Jul 23 14:22:49 2000
***************
*** 152,158 ****
row_pointers = (png_bytep *)malloc(sizeof(png_bytep) * height);
for (row = 0; row < height; row++) {
row_pointers[row] =
! (png_bytep)malloc(width * 3);
}
png_read_image(png_ptr, row_pointers);
--- 152,158 ----
row_pointers = (png_bytep *)malloc(sizeof(png_bytep) * height);
for (row = 0; row < height; row++) {
row_pointers[row] =
! (png_bytep)malloc(png_get_rowbytes(png_ptr, info_ptr));
}
png_read_image(png_ptr, row_pointers);
END--- cut here ---
--
電気通信大学 情報工学科
楯岡孝道 (Tateoka Takamichi) tate@cs.uec.ac.jp