c# – 将图像设置为图像源时重写(重新保存)图像时出现问题

全天好,

我有图像权限的麻烦.

我从文件加载图像,调整大小,然后将其保存到另一个文件夹.
我正在这样显示

uriSource = new Uri(Combine(imagesDirectoryTemp,generatedFileName),UriKind.Absolute);

    imgAsset.Source = new BitmapImage(uriSource);@H_404_8@ 
 

这是正常的,如果用户然后立即选择另一个图像并尝试将其保存在原始文件之后,问题就会发生.

保存我的图像时会生成异常“ExternalException:GDI发生一般错误”.

经过一些玩过之后,我把错误缩小到了imgAsset.Source = new BitmapImage(uriSource);因为删除此行并且不设置imagesource将允许我多次覆盖此文件.

我也试图将来源设置为别的东西,在重新保存之前,希望旧的参考将被处理,但情况并非如此.

我怎么能超过这个错误

谢谢,
可汗

编辑

现在使用这个代码我没有得到例外,但图像源没有更新.另外,由于我没有使用SourceStream,我不知道我需要处理什么来让这个工作.

uriSource = new Uri(Combine(imagesDirectoryTemp,UriKind.Absolute);

       imgTemp = new BitmapImage();
       imgTemp.BeginInit();
       imgTemp.CacheOption = BitmapCacheOption.OnLoad;
       imgTemp.UriSource = uriSource;
       imgTemp.EndInit();

       imgAsset.Source = imgTemp;@H_404_8@

解决方法

你几乎在那里

>使用BitmapCacheOption.OnLoad是保护文件被锁定的最佳方案.
>要使它重新读取文件,每次你还需要添加BitmapCreateOptions.IgnoreImageCache.

在你的代码添加一行应该做到这一点:

imgTemp.CreateOption = BitmapCreateOptions.IgnoreImageCache;@H_404_8@ 
 

从而导致此代码

uriSource = new Uri(Combine(imagesDirectoryTemp,UriKind.Absolute);
  imgTemp = new BitmapImage();
  imgTemp.BeginInit();
  imgTemp.CacheOption = BitmapCacheOption.OnLoad;
  imgTemp.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
  imgTemp.UriSource = uriSource;
  imgTemp.EndInit();
  imgAsset.Source = imgTemp;@H_404_8@

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString("x2"));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable<Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include "WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...