我正在使用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类型。
答案 0 :(得分:43)
我刚试过
Image.Source = new BitmapImage(
new Uri("http://yourdomain.com/image.jpg", UriKind.Absolute));
它没有问题......我在这里使用System.Uri
。也许您的URI格式错误,或者您必须使用绝对URI并使用UriKind.Absolute
代替?
答案 1 :(得分:17)
这就是我使用的:
string url = "ms-appx:///Assets/placeHolder.png";
image.Source = RandomAccessStreamReference.CreateFromUri(new Uri(url));
答案 2 :(得分:6)
嗯,Windows.Foundation.Uri
的记录如下:
.NET:此类型显示为System.Uri。
所以棘手的一点就是不要将它自己转换为Windows.Foundation.Uri
- 看起来WinRT会为你做这件事。看起来问题在于您正在使用的URI。在这种情况下,相对于到是什么?我怀疑你真的只需要找到正确的URI格式。
答案 3 :(得分:5)
此示例使用FileOpenPicker对象获取存储文件。 您可以使用任何方法来访问文件作为StorageFile对象。
徽标是图像控件的名称。
参考以下代码:
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;
}
}
答案 4 :(得分:4)
检查你的pictureUrl,因为它是导致异常的原因。
但这也应该有用
img.Source = new BitmapImage(new Uri(pictureUrl, UriKind.Absolute));
它应该与Windows.Foundation.Uri无关。因为winrt会为你处理它。
答案 5 :(得分:3)
请尝试以下格式:
ms-appx:/Images/800x600/BackgroundTile.bmp
The given System.Uri cannot be converted into a Windows.Foundation.Uri
答案 6 :(得分: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;
}