Establecer mediante programación el origen de una imagen (XAML)

Estoy trabajando en una aplicación de Windows 8. Necesito saber cómo configurar mediante programación la fuente de una imagen. Supuse que el enfoque de Silverlight funcionaría. Sin embargo, no lo hace. ¿Alguien sabe cómo hacer esto? Lo siguiente no funcionará:

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;

Recibo una excepción que dice: "El System.Uri dado no se puede convertir en Windows.Foundation.Uri".

Sin embargo, parece que no puedo encontrar el tipo Windows.Foundation.Uri.

preguntado el 29 de junio de 12 a las 19:06

7 Respuestas

Acabo de intentar

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

Y funciona sin problemas... estoy usando System.Uri aquí. Tal vez tenga un URI mal formado o tenga que usar un URI absoluto y usar UriKind.Absolute ¿en lugar?

respondido 18 nov., 13:19

yo también recibiendo una excepción? - Arsal

Esto es lo que uso:

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

Respondido el 29 de junio de 12 a las 20:06

¿Cuál es la acción de compilación para placeHolder.png? Lo tengo configurado en 'Contenido' y no consigo que la imagen se cargue correctamente. - Mac

me sale un error que RandomAccessStreamReference no se puede convertir en ImageSource. - Nick Heiner

Image.Source = new BitmapImage( new Uri("ms-appx:///Assets/placeHolder.png", UriKind.Absolute)); - Raúl K

Bueno, Windows.Foundation.Uri está documentado así:

.NET: este tipo aparece como System.Uri.

Así que la parte difícil no es convertirlo en un Windows.Foundation.Uri usted mismo - parece que WinRT lo hace por usted. Parece que el problema está en el URI que estás usando. que es relativo a ¿en este caso? Sospecho que realmente solo necesita encontrar el formato correcto para el URI.

Respondido el 29 de junio de 12 a las 19:06

Este ejemplo usa un objeto FileOpenPicker para obtener el archivo de almacenamiento. Puede usar cualquier método que necesite para acceder a su archivo como un objeto StorageFile.

Logo es el nombre del control de imagen.

Haga referencia al siguiente código:

    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;
        }
    }

contestado el 30 de mayo de 13 a las 13:05

verifique su pictureUrl ya que fue lo que resultó en la excepción.

pero esto debería funcionar también

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

no debería tener nada que ver con Windows.Foundation.Uri. ya que winrt lo manejará por ti.

Respondido 02 Jul 12, 03:07

Prueba este formato:

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

El System.Uri dado no se puede convertir en un Windows.Foundation.Uri

contestado el 23 de mayo de 17 a las 12:05

<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;
}

Respondido el 13 de enero de 16 a las 12:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.