2006年11月13日

GTileLayer.isPng() の使い方

 Google Maps API で GTileLayer を使おうとしたとき、実装に悩むのが isPng() である。悩まずに PNG ならtrueを返せば良いような気もするが、どうも値を見ているのか見てないのか良く分からない挙動をする。

 イロイロ実験してみた結果、PNG の alpha blending(半透明)を使いたいときに ture を返すよう実装するものらしい。


 なぜこのメソッドが存在するのか。

 IE6は、PNGに対応しているが、アルファブレンディング付きのPNGにはちゃんと対応していない。重ねて表示したときに、半透明してくれない。だがコレには回避策があって、AlphaImageLoaderフィルタを使えば良いらしい。

 ということでおそらく、isPng() は IE6 の時にAlphaImageLoaderを使うか使わないかを指定するものなのではないだろうか。


 だがしかし、isPng() を true にすると、なんか挙動がおかしくなる。初回表示はいいのだが、ブラウザのキャッシュに乗っている画像(地図)を表示しようとすると画像が抜けてしまうことが頻発する。

 回避策が分からず困っているんですが、どうにかならないですかね。

 IE7では試していないが、AlphaImageLoaderを使わなくても正しく扱えるようになっているらしいので、この問題も起きないだろう。Windows Update でIE7が強制配布される半年後からはIE6を無視して半透明を使いたい気分。

 ちなみに、透過GIFなら isPng() とか getOpacity() を実装しないでも(getTileUrl()のみ実装するだけで)フツーに重ね合わせて、透過部分は透過されて表示できる。あ、もちろんGIFだから半透明は出来ないケド。

 IE7が普及するまでは、GTileLayerには透過GIFを使うのが良いような気がするのでした。

Posted by rukihena at 01:04:41
トラックバックURL

このエントリーのトラックバックURL:
http://weblog.rukihena.com/mt/mt-tb.cgi/612

コメント