[Windows 8][How To] Cargar imagen a partir de su path

En la aplicación en la que estoy trabajando he tenido que implementar la carga de unas imágenes a partir de su path, estas imágenes están ubicadas en la biblioteca de imágenes y el path absoluto lo recupero desde la base de datos, el primer approach que realice era similar a este:

        private void OnLoaded(object sender, RoutedEventArgs e)
        {
            var bm = new BitmapImage(new Uri(@"D:\Users\nicolocodev\Pictures\csharp.png", UriKind.Absolute));
            image1.Source = bm;
        }

Luego consulté este artículo en la documentación de MSDN y me aclaro un poco más el panorama, el segundo approach quedo así:

	private async void OnLoaded(object sender, RoutedEventArgs e)
        {
            var storageFile = await StorageFile.GetFileFromPathAsync(@"D:\Users\nicolocodev\Pictures\csharp.png");
            IRandomAccessStream stream = await storageFile.OpenAsync(FileAccessMode.Read);
            var bm = new BitmapImage();
            bm.SetSource(stream);
            image1.Source = bm;
        }

Implementar en un GridView

Una vez lo quise implementar en un GridView, tuve que crear un convertidor, para que a partir dado un path obtuviera un BitmapImage, el convertidor quedo de la siguiente forma:

public class UriPhotoConverter : IValueConverter
    {      
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            return ImageConvert(value as string).Result;
        }

        public object ConvertBack(object value, Type targetType, object parameter, string language)
        {
            throw new NotImplementedException();
        }

        private async Task<BitmapImage> ImageConvert(string urlimage)
        {
            StorageFile file = await StorageFile.GetFileFromPathAsync(urlimage);
            IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read);
            var b = new BitmapImage();
            b.SetSource(stream);
            return b;
        }
    }

Un tema que no me ha gustado, es que no se ofrece la posibilidad de implementar el método Convert() como Task<object> y no puedo usar el sistema de comunicación de async/await 😦 en su lugar debo acudir a la propiedad Result de mi método asíncrono.

Y en el ItemTemplate:

<Image Source="{Binding LocalUrl, Converter={StaticResource PhotoConverter}}" 
                       Stretch="UniformToFill" 
                       AutomationProperties.Name="{Binding Title}"/>

Con esto conseguí que funcionara.

Si conoces una forma más óptima de hacer esto no dudes en dejar tu comentario 🙂

Hasta el próximo post.

 

Anuncios
[Windows 8][How To] Cargar imagen a partir de su path

6 comentarios en “[Windows 8][How To] Cargar imagen a partir de su path

  1. Camilo Rodriguez dijo:

    Hola Nico, yo estoy tratando de leer un mp3 que está contenido en los recursos de mi App, y hago según pusiste tu código pero de la siguiente manera:

    var storageFile = await StorageFile.GetFileFromPathAsync(ms-appx:///Cancion.mp3);

    Ejecuto y me lanza la siguiente excepción:

    “An exception of type ‘System.Exception’ occurred in mscorlib.dll but was not handled in user code

    WinRT information: The specified path (ms-appx:///Cancion.mp3) contains one or more invalid characters.

    Additional information: The specified path is invalid. (Exception from HRESULT: 0x800700A1)”

    Y no sé que podría ser, te agradezco la respuesta.

    1. Hola Camilo.

      Gracias por comentar 😉

      Para lo que tu necesitas, deberías usar el método GetFileFromApplicationUriAsync [http://msdn.microsoft.com/es-co/library/windows/apps/windows.storage.storagefile.getfilefromapplicationuriasync]… Te quedaría de la forma:

      var storagefile = await StorageFile.GetFileFromApplicationUriAsync(new Uri(this.BaseUri, “musica/cancion.mp3”));

      Si tienes problemas no dudes en comentar,

      Saludos 😉

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s