2012-06-29 12 views
26

Estoy trabajando en una aplicación de Windows 8. Necesito saber cómo establecer programáticamente la fuente de una imagen. Supuse que el enfoque de Silverlight funcionaría. Sin embargo, no es así. ¿Alguien sabe cómo hacer esto? El siguiente no funcionará:Establecer programáticamente la fuente de una imagen (XAML)

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; 

consigo una excepción que dice: "El System.Uri dado no puede ser convertido en un Windows.Foundation.Uri."

Sin embargo, parece que no puedo encontrar el tipo Windows.Fundación.Uri.

Respuesta

41

Sólo traté

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

y funciona sin problemas ... estoy usando System.Uri aquí. ¿Tal vez tiene un URI malformado o tiene que usar un URI absoluto y usar UriKind.Absolute en su lugar?

+1

no su trabajo para mí, im conseguir una excepción –

+0

mí también conseguir una excepción? – Arsal

6

Bueno, Windows.Foundation.Uri se documenta así:

.NET: Este tipo aparece como System.Uri.

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

17

Esto es lo que yo uso:

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

¿Cuál es la acción de compilación para placeHolder.png. Lo tengo configurado en 'Contenido' y no estoy cargando la imagen correctamente. – Mac

+8

Me aparece un error que dice que 'RandomAccessStreamReference' no se puede convertir en' ImageSource'. –

+2

Imagen.Source = new BitmapImage ( new Uri ("ms-appx: ///Assets/placeHolder.png", UriKind.Absolute)); – rahul

4

comprobar su pictureUrl ya que era lo que dio lugar a la excepción.

pero esto debería funcionar así

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.

4

Este ejemplo utiliza 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.

Logotipo es el nombre del control de imagen.

referencia el 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; 
     } 
    } 
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; 
} 
Cuestiones relacionadas