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 の値が設定されるように、組み合わせる。

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

印旛沼、新川、やちよ2022年01月20日 09:52

一年で一番寒い時期にさしかかるが、風が止んだので出かける。

サギのみなさん

印旛沼のサギのみなさん。

鴨のみなさん

こちらは鴨さん。

通行止め

印旛沼捷水路脇の自転車道(県道406)。印西市吉高の標識のところで通行止め。奥に見える鉄橋の脇で法面の崩落。向かい側から見た感じだと、上方でコンクリートのブロックなどが崩れている。

通行止め

帰りに見た反対側。印西市瀬戸の標識のところで通行止め。しばらくは遠回りになりそう。通行量の多い狭い車道になるので悩ましい。

オオバンお食事中

新川沿いの昼時。陸に上がったオオバンたちがお食事中。十羽くらいが地面をつついている。近くで停まると川面に逃げるので距離を取って。

ボロネーゼ

道の駅やちよ。向かいの農業交流センターで昼食。売り切ればかりだったが、ボロネーゼが生パスタのもちもちの食感で大当たり。

ベンチ撤去

正面の芝生広場。ベンチが撤去されていて、野外の食事場所がなくなり少し残念。傷んでいたので修復と期待したい。