私は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タイプが見つからないようです。
試したばかりです
Image.Source = new BitmapImage(
new Uri("http://yourdomain.com/image.jpg", UriKind.Absolute));
そして、問題なく動作します...ここでSystem.Uri
を使用しています。誤った形式のURIを持っているか、絶対URIを使用して代わりにUriKind.Absolute
を使用する必要がありますか?
これは私が使用するものです:
string url = "ms-appx:///Assets/placeHolder.png";
image.Source = RandomAccessStreamReference.CreateFromUri(new Uri(url));
さて、 Windows.Foundation.Uri
は次のように文書化されています:
.NET:このタイプはSystem.Uriとして表示されます。
したがって、トリッキーなビットは、それをWindows.Foundation.Uri
に変換することではありません-WinRTがそれをあなたのために行うように見えます。使用しているURIに問題があるようです。この場合、相対toとは何ですか? URIの正しい形式を見つける必要があるのは本当に疑いがあります。
この例では、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;
}
}
pictureUrlを確認してください。それが例外の原因となったためです。
しかし、これもうまくいくはずです
img.Source = new BitmapImage(new Uri(pictureUrl, UriKind.Absolute));
windows.Foundation.Uriとは関係ありません。 winrtが自動的に処理するためです。
この形式を試してください:
ms-appx:/Images/800x600/BackgroundTile.bmp
<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;
}