我使用:
Dim bmi As New BitmapImage(New Uri(fiInfo.FullName, UriKind.Absolute))
bmi.CacheOption = BitmapCacheOption.OnLoad
这不使用 OnLoad 但文件仍被硬盘锁定以覆盖。 有什么办法可以解锁?
谢谢
我使用:
Dim bmi As New BitmapImage(New Uri(fiInfo.FullName, UriKind.Absolute))
bmi.CacheOption = BitmapCacheOption.OnLoad
这不使用 OnLoad 但文件仍被硬盘锁定以覆盖。 有什么办法可以解锁?
谢谢
正如你链接到的问题所示,你需要调用BeginInit和EndInit方法,并设置UriSource属性,就像这样:
Dim bmi As New BitmapImage()
bmi.BeginInit()
bmi.CacheOption = BitmapCacheOption.OnLoad
bmi.UriSource = New Uri(fiInfo.FullName, UriKind.Absolute)
bmi.EndInit()
从文件中读取BitmapImage
,并使用MemoryStream
重新编写它:
MemoryStream ms = new MemoryStream();
BitmapImage bi = new BitmapImage();
byte[] bytArray = File.ReadAllBytes(@"test.jpg");
ms.Write(bytArray, 0, bytArray.Length);ms.Position = 0;
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
image.Source = bi;
bmi.EndInit()
方法+ OnLoad
,这样会更简单一些。 - Nasenbaer public static BitmapImage BitmapFromUri(Uri source)
{
var bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = source;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.EndInit();
return bitmap;
}
您可以这样打开图片:
BitmapImage bimg = BitmapFromUri(new Uri(some_URI));
它在加载完图像后立即释放图像。
希望这有所帮助!
BitmapFrame.Create(new Uri(filePath), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);