2016-09-10 9 views
0

この機能は、画像処理のいくつかの例から取られ、それが0と255の間の値を返します。メイク機能速く

private static byte CalculateColorComponentBlendValue(float source, float overlay) 
{ 
    float resultValue = 0; 
    byte resultByte = 0; 

    resultValue = source + overlay; 

    if (resultValue > 255) 
    { 
     resultByte = 255; 
    } 
    else if (resultValue < 0) 
    { 
     resultByte = 0; 
    } 
    else 
    { 
     resultByte = (byte)resultValue; 
    } 

    return resultByte; 
} 

そして、それは大きなループ内で呼ばれています。これは何とか最適化できますか?いくつかのビットを操作することがありますか?今度はループ全体が400msかかるので、この関数への呼び出しを取り除くと200msに短縮されます。

+0

私が考えることができる簡単なことの一つは、最も高い確率を持つ述語が最初に調べられるように 'source + overlay'値の分布を調べることです。 –

+0

ループの大きさはどれくらいですか? – Mark

+0

どのように測定しますか?あなたはコンパイラを付けずにリリース版で動いていますか? – Euphoric

答えて

0

ここで達成しようとしているのはクランピングです。以前は何度か議論されてきました。私はそれらの議論を見ることをお勧めします。だから、それらを繰り返すのではなく、私はいくつか質問をするでしょう。あなたの実装は純粋にC言語である必要がありますか?値を浮動させる必要がありますか?他にも最適化オプションがありますか?SIMD、スレッド、GPU?