●説明
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
4×4
8×8
16×16
32×32
クリッピングもループ内に入れて、その速度差を調べています。
●結果
画像サイズ
標準
時間(ms)ターボ
時間(ms)標準
時間(ms)ターボ
時間(ms)標準
時間(ms)ターボ
時間(ms)
13490
10060
13550
10080
17300
12706
14430
10670
14460
10690
18240
13260
17300
12570
17400
12650
21230
15290
30707
22575
30667
22578
35341
25930
●分析
10万回繰り返してもほぼ同じなので、クリッピングの有無は速度に影響しない。
通常使用では、クリッピング領域の変更は毎回行う為、setClip命令の速さも測ってみた。
大体1.2倍くらい時間がかかるようだが、元が速いため気にならないだろう。
不思議な事に、クリッピング領域が大きくなると、setClip命令の速さも微妙に遅くなるようだ。
もう1つ分った事として、イメージコピーだけのループであればsleepを入れなくてもリブートしない。
つまり、前の検証時にリブートしたのは、機種依存の不具合の可能性が高いのでは?