0

Windows ランタイム コンポーネントからネイティブ アルゴリズムに画像を渡す方法に関するデモ/チュートリアルを探しています。

1) システム上のファイルへのパスを渡し、ナイーブ ライブラリにイメージをロードさせる必要がありますか?

2) バイト配列を渡す必要がありますか?

ファイル システムとカメラからのライブ ストリームの両方を使用するように処理できますか?

コメント: 一部の情報を省略している可能性があります。申し訳ありませんが、画像の処理に使用されるアルゴリズムは、C++ でのクロスプラットフォームの実装です。これを WP8 および Win8 アプリに公開したいと考えています。そのため、UI からランタイム コンポーネント、そして c++ ライブラリに画像を取得する必要があります。何回もデコードしたくないことに同意します。これがコードでどのように見えるかについてのアドバイス/例が必要です。どういうわけか、ランタイム コンポーネント (アルゴリズムとアプリの間の API) にポインターを渡すことになることに同意します。

そのため、アルゴリズムの設計に適合するように、アプリケーションで画像のメモリ レイアウトがどのように表示されるかを処理する方法があれば、それもいいでしょう。OpenCV ect には、1x3 ピクセルの RGB イメージの BGRBGRBGR レイアウトがあります。(これで私の質問がより明確になることを願っています)

4

1 に答える 1

0

C++/CX はネイティブ コードであり、C++/CX アセンブリと純粋な C++ アセンブリの間で渡すデータを複製する必要はありません。圧縮された画像を 2 回デコードするのは、少し時間がかかるため避けるのが最善です。これが、ビットマップ データへのポインターを渡し、バイトを複製しないことをお勧めする主な理由です。画像はあまり大きくありません。理想的には、イメージの表示 (表示する場合) とバイトの処理の両方に使用できるビットマップの形式を使用します。たとえば、WriteableBitmap を使用してイメージを表示し、ピクセルにアクセスして処理するか、DirectX を使用します。両方。ビットマップを複製する前に、ビットマップが使用するメモリ量に注意してください。デコードされた 8MP 写真は、おそらく約 32MB のメモリを使用します。

編集* (詳細)

Silverlight は一般的に、画像処理に通常使用する WriteableBitmap を含む PRGBA ピクセル形式を使用していると思います。Silverlight も DirectX も言及していないので、アプリには Silverlight API を使用していると思います。その場合の簡単な選択は、Silverlight を使用して画像を表示し、ライブラリで WIC を使用して正しいピクセル形式を使用してビットマップ バッファーに再度デコードし、画像処理アルゴリズム ライブラリに渡すことができるようにしてから、WIC を再度使用することです。それをエンコードして戻します(pngまたはjpgに最も可能性が高い)。より良い解決策は、DirectX 相互運用機能を使用することです。画像を処理して画面に表示するたびに、デコード/エンコード/デコード(...) シーケンスを実行する必要がないようにします。次に、使用するピクセル形式に関係なく DirectX で画像を表示できるはずなので、WIC を使用して画像をバッファーにデコードし、DirectX を使用して表示することができると思います。

于 2013-01-26T18:57:47.267 に答える