Vector (.NET, C#) で条件分岐2022年01月06日 16:06

C#プログラムにおいて、多量のデータ処理(画像処理)に .NET の Vector で高速化を試みる。MSの文書は簡潔なもので、理解のためには試行錯誤が必要。

元のコード

画像の一点毎に処理する元のコード。BGRAのデータからPCCSの色相(Hue)の値を計算する。

equals

行199のEqualsを処理したところ。Vectorに詰めた _Rvec と _cMax の値を比較している。元のコードでは、行120に当たる部分。

下のデバッグ画面の rEQcmax の値を見ると、最初の4つが -1 になっている。値が一致し、TRUE と判断すると、0以外の値(この場合、-1)に設定される。

なお、Vectorの要素は、デバッグ画面では8個分あるが、実際は4で動作している。

ConditionalSelect

行203のConditionalSelectを処理したところ。先に値を設定した rEQcmax の内容に応じて、2つのVectorのいずれかの値を設定する。第2引数がTRUE、第3引数がFALSEの場合の設定値。元のコードでは、行122に当たる部分。

ここでは、rEQcmax の4つの要素がいずれもTRUEなので、hue1 (第2引数)の値が設定されている。

ConditionalSelect

行209のConditionalSelectを処理したところ。ここまでに3つのConditionalSelectを処理した。これは、元のコードの if / else if / else に当たるもの。最初の条件に合致すると hue1、次の条件に合致すると hue2a、どちらにも合致しないと hue3a の値が設定されるように、組み合わせる。

ちょっとしたパズルの要領。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://c5d5e5.asablo.jp/blog/2022/01/06/9453967/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。