frostar@wiki
描画関数の時間比較
最終更新:
frostar
-
view
各描画系の関数について時間計測を行いました。
計測したのは以下の関数。
計測したのは以下の関数。
- BitBlt
- StretchBlt
- TransparentBlt
- AlphaBlend
- TransparentAlphaBlt
- RotateBlt
- RotateTransparentAlphaBlt
計測ではhdc1に画像を読み込み、それをhdc2に計測対象の関数で描画します。
読み込み時間などは計測の対象に入らず、あくまで関数自体の処理時間を計測します。
また、時間は100回描画した時の平均値で出しています。
画像はかえるさんを使いました。透過させるために一部青(RGB(0,0,255))で塗りつぶしてます。
Transparent系による透過は青(RGB(0,0,255))、半透明合成のアルファ値は128で固定。
BitBlt以外の拡大倍率とRotate系の回転角度は()の中の値です。
結果は以下のようになりました。
読み込み時間などは計測の対象に入らず、あくまで関数自体の処理時間を計測します。
また、時間は100回描画した時の平均値で出しています。
画像はかえるさんを使いました。透過させるために一部青(RGB(0,0,255))で塗りつぶしてます。
Transparent系による透過は青(RGB(0,0,255))、半透明合成のアルファ値は128で固定。
BitBlt以外の拡大倍率とRotate系の回転角度は()の中の値です。
結果は以下のようになりました。
BitBlt:0.15 StretchBlt(2倍):3.34 TransparentBlt(等倍):0.20 TransparentBlt(1/2):3.74 AlphaBlend(等倍):0.20 AlphaBlend(1/3):3.08 TransparentAlphaBlt(等倍):0.74 TransparentAlphaBlt(3倍):6.90 RotateBlt(等倍、45度回転):31.06 RotateBlt(等倍、90度回転):28.57 RotateBlt(2倍、45度回転):23.58 RotateTransparentAlphaBlt(等倍、45度回転):33.40 RotateTransparentAlphaBlt(3倍、45度回転):21.89
起動時の状況などにかなり左右されるとは思いますが、RotateBltが他の描画系関数に比べるとかなり遅いことがわかります。
また、TransparentBlt、AlphaBlendは大きささえ変えなければBitBltとそれほど描画時間が変わらないこともわかります。また、拡大縮小の際にもStretchBltとはそれほど速度が変わりませんが、StretchBltではきれいな拡大縮小が行われないようなのでどちらかを使いましょう。
Rotate系で等倍よりも拡大したほうが時間早いのはなんでなんでしょうね?よくわかりません。
また、TransparentBlt、AlphaBlendは大きささえ変えなければBitBltとそれほど描画時間が変わらないこともわかります。また、拡大縮小の際にもStretchBltとはそれほど速度が変わりませんが、StretchBltではきれいな拡大縮小が行われないようなのでどちらかを使いましょう。
Rotate系で等倍よりも拡大したほうが時間早いのはなんでなんでしょうね?よくわかりません。