2012-06-29 55 views
26

Tôi đang làm việc trên ứng dụng Windows 8. Tôi cần phải biết làm thế nào để lập trình Source of a Image. Tôi cho rằng cách tiếp cận Silverlight sẽ hoạt động. Tuy nhiên, nó không. Có ai biết làm thế nào để làm điều này? Sau đây sẽ không làm việc:Cài đặt theo lập trình Nguồn của hình ảnh (XAML)

string pictureUrl = GetImageUrl(); 
Image image = new Image(); 
image.Source = new Windows.UI.Xaml.Media.Imaging.BitmapImage(new Uri(pictureUrl, UriKind.Relative)); 
image.Stretch = Stretch.None; 
image.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Left; 
image.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Center; 

tôi nhận được một ngoại lệ mà nói: "Các System.Uri cho không thể được chuyển đổi thành một Windows.Foundation.Uri"

Tuy nhiên, tôi không thể tìm thấy loại Windows.Foundation.Uri.

Trả lời

41

Tôi chỉ cố gắng

Image.Source = new BitmapImage(
    new Uri("http://yourdomain.com/image.jpg", UriKind.Absolute)); 

Và nó hoạt động mà không vấn đề ... Tôi đang sử dụng System.Uri đây. Có thể bạn có URI không đúng định dạng hoặc bạn phải sử dụng URI tuyệt đối và sử dụng UriKind.Absolute để thay thế?

+1

nó không làm việc cho tôi, im nhận được một ngoại lệ –

+0

tôi cũng nhận được một ngoại lệ? – Arsal

6

Vâng, Windows.Foundation.Uri được ghi chép lại như thế này:

NET: Đây là loại xuất hiện như System.Uri.

Vì vậy, mẹo khó xử lý không tự biến đổi thành một số Windows.Foundation.Uri - có vẻ như WinRT làm điều đó cho bạn. Có vẻ như vấn đề là với URI bạn đang sử dụng. Điều gì là tương đối đến trong trường hợp này? Tôi nghi ngờ bạn thực sự chỉ cần tìm định dạng phù hợp cho URI.

17

Đây là những gì tôi sử dụng:

string url = "ms-appx:///Assets/placeHolder.png"; 
image.Source = RandomAccessStreamReference.CreateFromUri(new Uri(url)); 
+0

Hành động xây dựng cho placeHolder.png là gì. Tôi đã đặt nó thành 'Nội dung' và tôi không tải hình ảnh đúng cách. – Mac

+8

Tôi nhận được một lỗi mà 'RandomAccessStreamReference' không thể được chuyển đổi thành' ImageSource'. –

+2

Hình ảnh.Nguồn = new BitmapImage ( Uri mới ("ms-appx: ///Assets/placeHolder.png", UriKind.Absolute)); – rahul

4

kiểm tra pictureUrl của bạn vì nó là những gì dẫn đến sự ngoại lệ.

nhưng điều này nên làm việc cũng

img.Source = new BitmapImage(new Uri(pictureUrl, UriKind.Absolute)); 

nó nên không có gì để làm với Windows.Foundation.Uri. vì winrt sẽ xử lý nó cho bạn.

4

Ví dụ này sử dụng đối tượng FileOpenPicker để lấy tệp lưu trữ. Bạn có thể sử dụng bất kỳ phương thức nào bạn cần để truy cập tệp của mình dưới dạng đối tượng StorageFile.

Logo là tên của điều khiển hình ảnh.

tham khảo đoạn mã sau:

var fileOpenPicker = new FileOpenPicker(); 
    fileOpenPicker.ViewMode = PickerViewMode.Thumbnail; 
    fileOpenPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; 
    fileOpenPicker.FileTypeFilter.Add(".png"); 
    fileOpenPicker.FileTypeFilter.Add(".jpg"); 
    fileOpenPicker.FileTypeFilter.Add(".jpeg"); 
    fileOpenPicker.FileTypeFilter.Add(".bmp"); 

    var storageFile = await fileOpenPicker.PickSingleFileAsync(); 

    if (storageFile != null) 
    { 
     // Ensure the stream is disposed once the image is loaded 
     using (IRandomAccessStream fileStream = await storageFile.OpenAsync(Windows.Storage.FileAccessMode.Read)) 
     { 
      // Set the image source to the selected bitmap 
      BitmapImage bitmapImage = new BitmapImage(); 

      await bitmapImage.SetSourceAsync(fileStream); 
      Logo.Source = bitmapImage; 
     } 
    } 
0
<Image Name="Img" Stretch="UniformToFill" /> 

var file = await KnownFolders.PicturesLibrary.GetFileAsync("2.jpg"); 
using(var fileStream = (await file.OpenAsync(Windows.Storage.FileAccessMode.Read))){ 
    var bitImg= new BitmapImage(); 
    bitImg.SetSource(fileStream); 
    Img.Source = bitImg; 
} 
Các vấn đề liên quan