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を使うのが良いような気がするのでした。
このエントリーのトラックバックURL:
http://weblog.rukihena.com/mt/mt-tb.cgi/612