1

ウェブカメラのフレームをキャプチャし、ピクセルごとに異なるアルゴリズムを実行した後にそれらを表示できるプログラムを作成しました-たとえば、画像をグレースケールにします。現時点では、ポインターを使用してビットマップ内のピクセルを設定および取得する FastBitmap クラス (リンク atm が見つかりません) を使用しています。

ただし、複数のスレッドが同じイメージで動作するように、プログラムをマルチスレッドにしたかったのです。そのために、BitmapData (スレッドごとに 1 つのセクション) を介してイメージをいくつかのセクションに分割し、異なるスレッドがそれぞれのセクション BitmapData で動作するようにします。最後に、「マネージャー」はすべてのスレッドが完了するまで待機し (結合)、結果のイメージを渡します。それが理論ですが、実際にはこれはうまくいきません。

このプログラムを実行すると、LHC を再利用する前に解放する必要があること、不正なメモリや外部例外などにアクセスしていることなど、いくつかの奇妙なエラーが表示されます。 BitmapData セクションが主な問題ですが、低速の Mashal コピーは使用したくありません。

だから私の質問は次のとおりです。

  • 安全でないポインターメソッドを使用して、C# でマルチスレッド画像処理をセクション化することは可能ですか?
  • はいの場合 - どのように?

画像処理ライブラリについては、フィルターやデフォルトの画像処理アルゴリズムは必要ありませんが、独自の「ピクセルごと」のアルゴリズムが必要です。プログラムにピクセルシェーダーを追加することも考えました。xD

私のプログラムはウェブカメラのフレームの変換に基づいているため、可能な限り高速なアルゴリズムが必要です。見つけたフォーラムの投稿やチュートリアルなどをすべて読みましたが、このアカウントを作成して最終的にここでこの質問をするまで、安全でないコードでこれを正しく行う方法がわかりません。

ロベポップ

4

1 に答える 1