2011-06-21 31 views
13

tôi sử dụng:BitmapImage trong WPF làm tập tin khóa

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

này không Use OnLoad Và tập tin vẫn bị khóa để ghi đè lên trên đĩa cứng. Bất kỳ ý tưởng làm thế nào để mở khóa?

Trân

+0

Ngoài ra còn có vấn đề về bộ nhớ để xem. Xem http://stackoverflow.com/questions/6271891/net-memory-issues-loading-40-images-memory-not-reclaimed-potentially-due-to-l/6271982#6271982 – Oppositional

+0

Cảm ơn. Bạn có muốn tôi nói, để không cố gắng để lưu trữ tất cả các tập tin nếu không thực sự có thể với liên kết của bạn? – Nasenbaer

Trả lời

30

Như đã trình bày trong câu hỏi bạn liên kết đến, bạn sẽ cần phải gọi BeginInit và EndInit, như vậy cũng như thiết lập thuộc tính UriSource:

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

Cảm ơn bạn đã trả lời nhanh chóng của bạn cũng liên quan đến các từ khóa của tôi và VB thay vì C#! Hoạt động tốt ngay bây giờ! – Nasenbaer

+0

Có cách nào để thực hiện việc này nghiêm ngặt khi sử dụng XAML hay không. – TrustyCoder

7

Đọc BitmapImage từ tập tin và viết lại nó với một 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; 
+0

Cảm ơn Navid đã trả lời nhanh chóng của bạn. Tôi thấy rằng sẽ làm việc theo cách đó như xa như tôi thấy. Tôi đang sử dụng 'bmi.EndInit()' methode + 'OnLoad ' bây giờ mà là một chút đơn giản hơn trong trường hợp của tôi. – Nasenbaer

+0

Bây giờ, ai sở hữu thể hiện đối tượng MemoryStream và có trách nhiệm xử lý nó? – Henrik

+1

Dù sao ... Làm thế nào để mở khóa tập tin và xóa nó? –

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

tôi đã như vấn đề imilar và tôi giải quyết bằng phương pháp này: (đó là một cá thể của một câu trả lời here)

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

Bạn có thể mở hình ảnh như thế này:

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

Và nó phát hành hình ảnh immediatly sau khi tải nó .

Hy vọng nó có thể hữu ích!

Các vấn đề liên quan