◇EZアプリ(Java) Phase3 -イメージ描画速度-

●説明
drawImageで画像をコピーする速さを計測する。
クリッピングした時の速度差も調べてみる。

●プログラム1

long tt=System.currentTimeMillis();
Image image=Image.createImage(「横幅」, 「高さ」);
for(int i=0; i < 100000; i++){
  graOff.drawImage(image, 0, 20, graOff.LEFT|graOff.TOP);
}
String s="time:" + (System.currentTimeMillis() - tt);

生成したイメージをそのまま別のイメージにコピーしています。
graOffは普通にvreateImageした画像領域です。

●プログラム2

long tt=System.currentTimeMillis();
Image image=Image.createImage(32, 32);
graOff.setClip(0, 20, 「横幅」, 「高さ」);
for(int i=0; i < 100000; i++){
  graOff.drawImage(image, 0, 20, graOff.LEFT|graOff.TOP);
}
String s="time:" + (System.currentTimeMillis() - tt);

生成したイメージをクリッピングして、イメージにコピーしています。
クリッピングした場合に速度に変化があるかを調べています。

●プログラム3

long tt=System.currentTimeMillis();
Image image=Image.createImage(32, 32);
for(int i=0; i < 100000; i++){
  graOff.setClip(0, 20, 「横幅」, 「高さ」);
  graOff.drawImage(image, 0, 20, graOff.LEFT|graOff.TOP);
}
String s="time:" + (System.currentTimeMillis() - tt);

生成したイメージをクリッピングして、イメージにコピーしています。
クリッピングもループ内に入れて、その速度差を調べています。

●結果
画像サイズ

プログラム1

プログラム2

プログラム3

標準
時間(ms)
ターボ
時間(ms)
標準
時間(ms)
ターボ
時間(ms)
標準
時間(ms)
ターボ
時間(ms)

4×4

13490 10060 13550 10080 17300 12706

8×8

14430 10670 14460 10690 18240 13260

16×16

17300 12570 17400 12650 21230 15290

32×32

30707 22575 30667 22578 35341 25930

●分析
10万回繰り返してもほぼ同じなので、クリッピングの有無は速度に影響しない。

通常使用では、クリッピング領域の変更は毎回行う為、setClip命令の速さも測ってみた。
大体1.2倍くらい時間がかかるようだが、元が速いため気にならないだろう。
不思議な事に、クリッピング領域が大きくなると、setClip命令の速さも微妙に遅くなるようだ。

もう1つ分った事として、イメージコピーだけのループであればsleepを入れなくてもリブートしない。
つまり、前の検証時にリブートしたのは、機種依存の不具合の可能性が高いのでは?


トップメニュープログラマ専用EZアプリ(Java)Phase3