私はアルゴリズムの周りにGUIをビルドしています。この目的のために、私はそれの中にイメージコンポーネントを含むウィンドウコンポーネントを持っています。ローカルイメージソースファイルが変更されたときにイメージコンテナを更新する
イメージ成分(imgHolder)内のコンテンツは、この例の目的のためのように初期化されるのBitmapImageオブジェクト(_image)、次式で与えられる。
_image = new BitmapImage();
_image.BeginInit();
_image.CacheOption = BitmapCacheOption.OnLoad;
_image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
_image.UriSource = new Uri("c:\\a1.bmp");
_image.EndInit();
imgHolder.Source = _image;
ウィンドウを含むメインプログラムを実行しますMatlab DLLファイル内からアルゴリズムの関数の1つを呼び出す。これはアルゴリズムの1回の反復を実行し、その結果として上のローカルbmpファイル( "c:\ a1.bmp")に結果を書き込みます。その結果、イメージの基礎となるデータが更新されました。これをimgHolderコンポーネントに反映させたいと思います。この目的のために、関数から戻るたびに上記のコードを単純に複製しています。
このアプローチの問題は、アルゴリズムが1回の実行あたり約100回の反復を持つため、これが100回発生しなければならないことです。それは正しいとは思わない。私は同じファイルからすべての100ビットマップ画像を作成しています。
これを調べると、memorystreamを代わりに使用できることがわかりましたが、アルゴリズムが実行されるときに100枚の画像を作成する必要があるように見えるので、これは劇的な改善かどうかは疑問です。どういうわけか、基礎となるバッファを直接変更することはできませんか? GetPixelとSetPixelは、呼び出されるたびにロックを設定するので、あまり効率的ではないと聞きました。おそらく同じ_imageオブジェクトを使ってこれを行うことは可能でしょうか?これがローカルファイルではない場合は、キャッシュなしオプションを使用できた可能性があり、「単独で」動作するはずです。ロックされているため、キャッシュされていないオプションがローカルになっているファイルが動作しませんでした。
もっと良いアイデアはありますか?
ありがとうございます!
おかげで、これは私が探している解決策のように見えます。 WriteableBitmapが変更されるたびに更新されるように、これをImageに結びつけるにはどうすればよいですか? ImageオブジェクトのsourceプロパティをWriteableBitmapオブジェクトに設定するだけで、それを行うことはできますか?私はキャッシュポリシーもWrietableBitmapオブジェクトで採用する必要があると仮定します(GUIに変更が反映されるように) – filipcampeanu
XAMLのImageコントロールでプロパティを設定していません。上記の例のように 'image.Source = bitmap'を設定すれば、すべてが動作します。この例を試してみると、マウスの移動ごとにImageが更新されます。私は 'WritableBitmap'は決してキャッシュされないと思います。 – Clemens
XAMLを追加しました。 – Clemens