我周围栋的算法的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