私はかなり有能な Java プログラマーであり、C を初めて使用します。4 つの操作モードを持つルーチンを最適化しようとしています。
画像内のすべてのピクセルをループし、渡された「モード」に応じて新しいピクセル値を計算します。
私の質問は、ネストされた 2 つの for ループ内の switch ステートメントのオーバーヘッドに関するものです。基本的な C ステートメント、数学、および論理演算の相対的な効率に関するドキュメントへのリンクに興味があります。
コードは次のようになります。
for (x = 0; x < width; x++) {
for (y = 0; y < height; y++) {
switch (mode) /* select the type of calculation */
{
case 0:
weight = dCentre / maxDistanceEdge;
case 1:
weight = (float)x/width;
break;
case 2:
weight = (float)y/height;
break;
case 3:
weight = dBottomLeft / maxDistanceCorner;
break;
case 4:
weight = dTopRight / maxDistanceCorner;
break;
default:
weight = 1;
break;
}
// Calculate the new pixel value given the weight
...
}
}
これが 5000 x 5000 ピクセルを超えるイメージの場合、多くのオーバーヘッドが発生すると予想されますか? いくつかのテストを試みましたが、システム (モバイル デバイス) がバックグラウンドで実行しているあらゆる種類のものが結果をゆがめる可能性があるため、私の結果はいたるところにあります。
もう 1 つのオプションは、各モードに個別のメソッドを用意し、それぞれに独自の 4 つのループを持たせることです。これにより明らかに冗長なコードが導入されますが、ここでは効率が重要です。
前もって感謝します!
ガブ