MAD MAPS雑記

言うまでもないことだが、MAD MAPSの最大の弱点は画像ロードの遅さである。モバイルマップNaviの地図データは1ピースあたり500x500ピクセルPNG画像データであるが、1枚のロードに5〜6秒くらいの時間がかかってしまっている。このPNG読込処理はJavaのライブラリ機能をそのまま利用しているのだが、このライブラリ機能の処理自体が重いために、基本的にはどーしよーもない問題である。それでも何とかしたいと色々試してたのだが、どうやら完全にどーにもならないらしいことが判明してしまった。根本的に、Java内での画像イメージの生成自体が無茶苦茶遅いらしいのだ。

てっきり、ライブラリ機能でのPNGの展開処理が遅いんだろうと思っていたのだが、単にメモリ上にバイナリデータを用意し、そこからImageクラスのオブジェクトを作るだけの処理で、信じられないほどの無茶苦茶な時間がかかっている。

int[] bitmap_buf=new int[500*500];
for(int i=0;i<500*500;i++) bitmap_buf[i]=0xff000000 + i;
Image img = createImage( new MemoryImageSource(500, 500, bitmap_buf, 0, 500) );

上例のように、単に配列上に生成したデータを元にImageオブジェクトを生成するだけの処理で、りなざう上では5秒くらいの時間がかかっているのだ。普通ならこんなの一瞬で終わるはずの処理で、実際に手元のWindows環境では、ほとんど時間を測定できないくらいの短時間で終了してしまう。こんな事でこんなに時間がかかるなんて、一体何の冗談かと呆れてしまうほどである。

つーわけで、そもそもImageオブジェクトの生成自体が遅すぎるから、どう足掻いても高速化は望めそうにない。PNGの展開が重いのであれば、最悪一部の処理をC言語化してでも対処しようかと思っていたのだが、これではいくらなんでも手の出しようがないなぁ。


つか、先の文字化け問題といい、このImage処理速度といい、やっぱこのりなざうJavaの実装があまりにアレすぎるよなぁ。まぁタダで提供されてるものにあまり文句も言えないんだが、PDAでのJavaアプリ開発ってのはもっと可能性があると思うだけに、これはあまりに勿体ない。

Java開発のアプリケーションは、実装にちょっと気をつければJavaの稼動する各種環境で動かすことが出来る。このMAD MAPSも普通にWindows環境で動かせるし、LinuxとかMacとかでも普通に動くはずだ。WinCE系ではどーもフリーのJava環境はないみたいだが、存在しないわけではないみたいだし。環境の垣根にとらわれずに動かすことが出来るってのはJavaの本領だし、使い慣れたソフトがPC上でもPDA上でも動くってことになれば嬉しい人は多いだろう。

それにPDA環境ってのは開発の垣根が高いから、フリーソフト作者も結構二の足を踏んでる事が多いと思うんだが。PDAそのものが最近はすっかり下火だが、その一因として開発の垣根のせいでソフト開発がいまいち発展しないってのもあるんじゃないかと思う。Javaなら開発環境はタダで手に入るし、PC上で開発できるから垣根もずっと低くなる。実行環境さえもっとしっかりとしたのが提供されれば、もっと盛り上がっていくんじゃないかと思うんだが・・・。

しかし残念ながら、SunにはPDAに対するやる気が全くないみたいなんだよな。まぁあまりSunの金儲けには繋がらないだろうし、仕方ないといえばそうなんだが・・・。