我看到一个奇怪的图像行为。
我有两种计算热图图像的方法。 一个方法在GUI线程中工作,另一个在后台线程中工作。 两种方法都应该相同,输出作为png似乎是好的。 GUI线程创建的图像能够加载,但是后台线程中创建的图像不能加载。
我将计算出的图像保存为硬盘驱动器上的文件并重新加载。 当我加载它并将其分配给图像源时,它不是null。但是当程序离开分配方法时,image.source为null。我不明白为什么。
这是代码:
private void LoadImageClicked(object sender, RoutedEventArgs e)
{
this.ImageHeatMap.BeginInit();
this.ImageHeatMap.Source = new BitmapImage(new Uri(@"HeatMapImage.png", UriKind.Relative));
this.ImageHeatMap.EndInit();
}
这就是他如何将图像保存为png:
public void SaveFile(BitmapSource source, string filePath)
{
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
BitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(source));
encoder.Save(fileStream);
}
}
有趣的是我无法在调试模式下查看Image.Source.Height属性。但是使用工作文件,我能够读取此属性。 调试看起来像这样:
英文错误消息(免费翻译):“this.Image:heatMap.Source.Height”抛出类型“System.IO.IOException”的异常
有人能帮我理解问题出在哪里?因为我不明白为什么我无法加载图像。我可以通过Windows图片浏览器打开它。
我认为问题是元数据,但我不知道 - 目前 - 如何解决它。
答案 0 :(得分:-2)
对于.Net中的图像对象,我发现需要强制它被处理掉。使用操作图像的任何类的.Dispose()方法足以释放它对文件的保持。你会认为关闭Stream会强制推出这个版本,但事实并非如此。
编辑:由于你不理解回应,你投票很糟糕。我想删除我的回复,但我认为这不符合社区的利益。这是一篇相关文章,解释了我在进一步说的内容。