I use:
Dim bmi As New BitmapImage(New Uri(fiInfo.FullName, UriKind.Absolute))
bmi.CacheOption = BitmapCacheOption.OnLoad
this does not Use OnLoad And file still is locked to overwrite on harddisk. Any idea how to unlock?
Regards
As shown in the question you link to, you'd need to call BeginInit and EndInit, like so as well as set the UriSource property:
Dim bmi As New BitmapImage()
bmi.BeginInit()
bmi.CacheOption = BitmapCacheOption.OnLoad
bmi.UriSource = New Uri(fiInfo.FullName, UriKind.Absolute)
bmi.EndInit()
Read the BitmapImage
from file and rewrite it with a 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;
smukamuka
I had a similar problem and I solved using this method: (it's a personalization of an answer here)
public static BitmapImage BitmapFromUri(Uri source)
{
var bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = source;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.EndInit();
return bitmap;
}
You can open the image like this:
BitmapImage bimg = BitmapFromUri(new Uri(some_URI));
And it releases the image immediatly after loading it.
Hope it can helps!
BitmapFrame.Create(new Uri(filePath), BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
来源:https://stackoverflow.com/questions/6430299/bitmapimage-in-wpf-does-lock-file