2011-06-21 25 views
13

yapar:BitmapImage kullandığım kilit dosyasını

Dim bmi As New BitmapImage(New Uri(fiInfo.FullName, UriKind.Absolute)) 
bmi.CacheOption = BitmapCacheOption.OnLoad 

bu değil Use OnLoad yapar Ve dosya hala sabit disk üzerinde üzerine yazmak için kilitlenir. Kilidin nasıl açılacağı hakkında bir fikrin var mı?

Dim bmi As New BitmapImage() 
bmi.BeginInit() 
bmi.CacheOption = BitmapCacheOption.OnLoad 
bmi.UriSource = New Uri(fiInfo.FullName, UriKind.Absolute) 
bmi.EndInit() 
+0

Ayrıca, göz atmanız gereken bellek sorunları da vardır. Bkz. Http://stackoverflow.com/questions/6271891/net-memory-issues-loading-40-images-memory-not-reclaimed-potentially-due-to-l/6271982#6271982 – Oppositional

+0

Teşekkürler. Bağlantınızla gerçekten mümkün değilse tüm dosyaları önbelleğe almaya çalışma dememi istermiyim? – Nasenbaer

cevap

30

bağlanmak Söz gösterildiği gibi, şöyle BeginInit ve EndInit çağrı böylece yanı sıra set UriSource özelliği gerekirdi ve bir MemoryStream ile yeniden yazın: Ben vardı

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; 
+0

Anahtar kelimelerin ve C# yerine VB ile ilgili hızlı cevabınız için teşekkür ederiz! Şimdi harika çalışıyor! – Nasenbaer

+0

Bunu kesinlikle XAML kullanarak yapmak için bir yol var mı. – TrustyCoder

7

dosyadan BitmapImage oku:

Selamlar

+0

Hızlı cevabınız için teşekkür ederim Navid. Gördüğüm kadarıyla bu şekilde çalışacağını görüyorum. Benim durumumda biraz daha basit olan 'bmi.EndInit()' methodde + 'OnLoad ' kullanıyorum. – Nasenbaer

+0

Şimdi, MemoryStream nesne örneğinin sahibi kimdir ve onu imha etmekten sorumludur? – Henrik

+1

Neyse ... Dosya nasıl açılır ve silinir? –

0
BitmapFrame.Create(new Uri(filePath), BitmapCreateOptions.None, BitmapCacheOption.OnLoad); 
2

Böyle bir görüntü açabilir

public static BitmapImage BitmapFromUri(Uri source) 
    { 
     var bitmap = new BitmapImage(); 
     bitmap.BeginInit(); 
     bitmap.UriSource = source; 
     bitmap.CacheOption = BitmapCacheOption.OnLoad; 
     bitmap.EndInit(); 
     return bitmap; 
    } 

(o bir cevap here bir kişiselleştirme var):

BitmapImage bimg = BitmapFromUri(new Uri(some_URI)); 

Ve onu yükledikten sonra anında görüntü serbest bırakır imilar sorun ve ben bu yöntemi kullanarak çözüldü .

Umut yardımcı olabilir!