2009-05-13 36 views
34

Việc lắp ráp của tôi bao gồm một hình ảnh với tài nguyên BuildAction ==. Tôi muốn có được một BitmapImage từ tài nguyên nhúng này.Làm cách nào để có được BitmapImage từ Tài nguyên?

tôi có thể tải một BitmapImage từ tập tin như thế này:

var bitmap = new BitmapImage(new Uri(path)); 

Nhưng làm thế nào để tôi có thể tạo một Uri rằng sẽ đề cập đến một hình ảnh tài nguyên nhúng?

Khi tôi cố gắng và tạo ra một 'pack URI' (ví dụ pack://application:,,,/MyImage.png hoặc pack://application:,,,/MyAssembly;component/MyImage.png), một ngoại lệ được ném:

System.UriFormatException "không hợp lệ URI: Một cổng đã được dự kiến ​​vì có một dấu hai chấm (':') hiện tại nhưng không thể phân tích cú pháp cổng. "

tôi thấy việc sửa chữa, đến UriFormatException trong này blog post

Tuy nhiên, với mà sửa chữa áp dụng, tôi vẫn nhận được ngoại lệ cố gắng để tải một BitmapImage từ một gói URI.

Khi sử dụng định dạng pack://application:,,,/Image.png, tôi nhận được NullReferenceException và khi sử dụng định dạng pack://application:,,,/AssemblyName;component/Image.png, tôi nhận được NotSupportedException "Tiền tố Uri không được nhận dạng".


Tóm tắt Vấn đề của tôi là tôi đã cố gắng sử dụng một 'gói URI' trong một quá trình trước khi bất kỳ kiểm soát WPF/cửa sổ/etc đã được khởi tạo, vì vậy chương trình 'gói' URI là chưa đăng ký (WPF khác yêu cầu 'công cụ' cũng không được thiết lập quá, bởi vì tự đăng ký gói chương trình không tự sửa chữa vấn đề). Giải pháp là chờ cho đến sau khi instantiating usercontrol WPF của tôi sử dụng các gói URI.

+1

Cảm ơn bạn đã tóm tắt sự cố. Tôi có cùng một vấn đề và sẽ cố gắng giải quyết nó như bạn gợi ý. – Oskar

+0

bản sao có thể có của [Đang tải bitmapImage trong mã] (http://stackoverflow.com/questions/801833/loading-bitmapimage-in-code) –

Trả lời

20

This MSDN page có tất cả thông tin bạn có thể muốn biết về tài nguyên URI trong WPF (thường được gọi là URI gói). Bạn sẽ muốn sử dụng các URI tương đối thường xuyên hơn, vì vậy hãy xem Bảng 4, cần được sử dụng cụ thể.

Nếu bạn muốn xem tổng quan về tài nguyên (gói) URI, xem this blog post. Nó cho thấy cú pháp đó thực sự tương đối đơn giản:

pack://application:,,,/ResourceFile.xaml 

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml 

Tuy nhiên, việc tìm kiếm URI tài nguyên chính xác đòi hỏi một chút thử nghiệm.

+1

@mackenir: Bạn đã bao giờ xem xét URL bạn đã đăng trong câu hỏi * đã chỉnh sửa * chưa chưa xuất hiện vào lúc tôi viết câu trả lời của tôi. Rudeness sẽ không giúp bạn có được câu trả lời hay. – Noldorin

+1

Xin lỗi! Tôi quên tôi đã chỉnh sửa câu hỏi, tin hay không. – mackenir

+1

@mackenir: Không phải lo lắng, trong trường hợp đó. Bạn đã thử sử dụng một URI tương đối chưa, aa được hiển thị trong Bảng 4 trên trang MSDN? Bạn có thể có nhiều may mắn hơn với điều đó ... – Noldorin

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