我周圍棟的算法的GUI更新圖像容器。爲此,我有一個Window組件,其中包含一個Image組件。當本地圖像源文件更改
圖像部件(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文件中調用算法函數之一。這將運行算法的一次迭代,最後將結果寫入上面的本地bmp文件(「c:\ a1.bmp」)。因此,圖像的基礎數據已經更新,我希望這可以反映在imgHolder組件中。爲了這個目的,我只是簡單地複製上面的代碼,只要我從函數返回。
這種方法的問題是,該算法將每次運行大約100次迭代所以這將要發生100次。這看起來不正確。我將創建100個來自同一文件的不同位圖圖像。
研究這個我發現可以使用memorystream代替,但是我想知道這是否會是一個巨大的改進,因爲它似乎仍然需要在算法執行時創建100個圖像。不可能以某種方式直接修改底層緩衝區嗎?我聽說GetPixel和SetPixel不是很有效,因爲他們每次調用它時都會設置一個鎖。是否有可能使用相同的_image對象來做到這一點?如果這不是一個本地文件,我可以使用一個無緩存選項,它應該「獨自」工作。由於該鎖定,文件爲本地的無緩存選項不起作用。
有沒有人有更好的主意?
謝謝!
謝謝,這看起來像我正在尋找解決方案。我如何將它與圖像綁定,以便每次修改WriteableBitmap時都會更新它?我可以通過將Image對象的source屬性設置爲WriteableBitmap對象嗎?我假定一個沒有高速緩存策略還應在WrietableBitmap對象(這樣的變化反映在GUI) – filipcampeanu 2012-02-10 20:31:37
我還沒有設置在XAML圖像控件的任何屬性上使用。只需像上面的例子那樣設置'image.Source = bitmap'就可以了。試試這個例子,圖片在每次鼠標移動時都會更新。我認爲'WritableBitmap'永遠不會被緩存。 – Clemens 2012-02-10 20:42:19
添加XAML ... – Clemens 2012-02-10 20:50:43