web-dev-qa-db-fra.com

Définir par programme la source d'une image (XAML)

Je travaille sur une application Windows 8. J'ai besoin de savoir comment définir par programme la source d'une image. J'ai supposé que l'approche Silverlight fonctionnerait. Mais ce n'est pas le cas. Est-ce que quelqu'un sait comment faire ça? Les éléments suivants ne fonctionneront pas:

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;

J'obtiens une exception qui dit: "Le System.Uri donné ne peut pas être converti en Windows.Foundation.Uri."

Cependant, je n'arrive pas à trouver le type Windows.Foundation.Uri.

27
Villager

J'ai juste essayé

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

Et ça marche sans problème ... J'utilise System.Uri ici. Vous avez peut-être un URI mal formé ou vous devez utiliser un URI absolu et utiliser UriKind.Absolute au lieu?

43
Rico Suter

Voici ce que j'utilise:

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

Bien, Windows.Foundation.Uri est documenté comme ceci:

.NET: ce type apparaît comme System.Uri.

Donc, le plus difficile n'est pas de le convertir en Windows.Foundation.Uri vous-même - il semble que WinRT le fasse pour vous. Il semble que le problème soit lié à l'URI que vous utilisez. Quel est-il relatif à dans ce cas? Je suppose que vous avez juste besoin de trouver le bon format pour l'URI.

6
Jon Skeet

Cet exemple utilise un objet FileOpenPicker pour obtenir le fichier de stockage. Vous pouvez utiliser la méthode dont vous avez besoin pour accéder à votre fichier en tant qu'objet StorageFile.

Logo est le nom du contrôle d'image.

Référencez le code suivant:

    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;
        }
    }
5
Scott Nimrod

vérifiez votre pictureUrl car c'est ce qui a entraîné l'exception.

mais cela devrait aussi fonctionner

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

cela ne devrait avoir rien à voir avec Windows.Foundation.Uri. puisque winrt s'en chargera pour vous.

4
LZH

Essayez ce format:

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

Le System.Uri donné ne peut pas être converti en Windows.Foundation.Uri

3
walther
<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;
}
0
reza.cse08