28

我正在开发一个 Windows 8 应用程序。我需要知道如何以编程方式设置图像的来源。我认为 Silverlight 方法会奏效。然而,事实并非如此。有人知道怎么做这个吗?以下将不起作用:

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;

我收到一个异常,上面写着:“给定的 System.Uri 无法转换为 Windows.Foundation.Uri。”

但是,我似乎找不到 Windows.Foundation.Uri 类型。

4

7 回答 7

44

我刚试过

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

它可以毫无问题地工作......我在System.Uri这里使用。也许您的 URI 格式不正确,或者您必须使用绝对 URI 并UriKind.Absolute改为使用?

于 2012-06-29T18:48:01.167 回答
17

这就是我使用的:

string url = "ms-appx:///Assets/placeHolder.png";
image.Source = RandomAccessStreamReference.CreateFromUri(new Uri(url));
于 2012-06-29T19:49:52.120 回答
6

嗯,Windows.Foundation.Uri记录是这样的:

.NET:此类型显示为 System.Uri。

所以棘手的一点不是将它转换成Windows.Foundation.Uri你自己 - 看起来 WinRT 会为你做到这一点。看起来问题出在您使用的 URI 上。在这种情况下,它什么相关?我怀疑您真的只需要为 URI 找到正确的格式。

于 2012-06-29T18:44:54.647 回答
5

本示例使用 FileOpenPicker 对象来获取存储文件。您可以使用所需的任何方法将文件作为 StorageFile 对象进行访问。

Logo 是图像控件的名称。

参考以下代码:

    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;
        }
    }
于 2013-05-30T12:44:26.993 回答
4

检查您的pictureUrl,因为它是导致异常的原因。

但这也应该有效

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

它应该与 Windows.Foundation.Uri 无关。因为winrt会为你处理。

于 2012-07-02T02:13:29.107 回答
3

试试这种格式:

ms-appx:/Images/800x600/BackgroundTile.bmp

给定的 System.Uri 无法转换为 Windows.Foundation.Uri

于 2012-06-29T18:48:04.137 回答
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;
}
于 2015-12-28T09:14:00.320 回答