0

現在はクールなので、フィルターを使用して画像処理を行っています。フィルターを作成するために使用する簡単な方法の 1 つは、RGB 曲線プロファイルを計算することです。これにより、redProfile、greenProfile、blueProfile の 3 つの配列が得られます。

ループ内のピクセルに効果を適用するときは、通常これを行っています。

*dest++ = bLomoRGB[top(r)];
*dest++ = gLomoRGB[top(g)];
*dest++ = rLomoRGB[top(b)];
*dest++ = 0xff;         
x++;        
if (x > 639) { x = 0; y++; }        
continue;

そのため、各色について、プロファイルで色を選択します。

これはマトリックスで作業すること、またはより効率的に実行することは可能ですか?

つまり、次のようなコーディング: Array a = all my pixels Array b = my index Apply b on a

これは疑似コードよりも単純であり、コードとしてグレー表示するに値しないことはわかっていますが、インデックス付きの値のすべての数値を変更するなど、単一のことを行うループを常に維持することが適切かどうかはまだ疑問です。

4

1 に答える 1

2

マトリックス全体に対してこれを実行する魔法の操作があるとは思えません。

ただし、一度に 32 ビット ブロックごとにデータを書き込むと、より効率的に実行できます。

uint32_t *dest;

*dest++ = (bLomoRGB[top(r)] & 0xff) | ((gLomoRGB[top(g)] & 0xff) << 8) | 
          ((rLomoRGB[top(b)] & 0xff) << 16) | 0xff000000;

また、コードは非常にうまく並列化できます。このようなループを並列化する標準的な方法を探している場合は、OpenMPをご覧ください。

于 2013-06-25T19:48:45.433 に答える