矩形描画のパフォーマンスを測定します。
非矩形に拡張することを考慮して、一行ずつ転送するモードを実装しました。予想されたことですが、矩形の場合は圧倒的に不利です。
当初、スキャンラインは行ごとにMemoryImageSourceを生成していましたが、あまりにもパフォーマンスが悪いので、イメージは矩形で作成して一行ずつ転送するようにしました。
Image img = Toolkit.getDefaultToolkit().createImage(
new MemoryImageSource(w, h, buf, 0, w));
switch (drawMode) {
case DRAW_RECTANGLE: {
g.drawImage(img, x, y, w, h, null);
drawCount += w * h;
break;
}
case DRAW_SCANLINE: {
int xx = x + w;
for (int i = 0; i < h; i++) {
int yy = y + i;
g.drawImage(img, x, yy, xx, yy + 1, 0, i, w, i + 1, null);
drawCount += w;
}
break;
}
}
drawCountは転送量を記録しています。ステータスバーの右の数字がそれです。