Para la plataforma Uno, necesito cargar una imagen de los recursos de "contenido". Estoy usando GetManifestResourceStream, pero devuelve nulo mientras ejecuto el proyecto de UWP (no he probado los otros sabores).

Para profundizar un poco más, agregué GetManifestResourceNames, pero también está devolviendo una matriz vacía.

Aquí está mi código, que está dentro de un UserControl (Source es una propiedad):

private void LoadBmpSrc()
{
  if (Source == null)
    return;

  Assembly assembly = GetType().GetTypeInfo().Assembly;
  string[] names = assembly.GetManifestResourceNames();
  using (Stream stream = assembly.GetManifestResourceStream(Source))
  {
    bmpSrc = SKBitmap.Decode(stream);
  }
}

En el archivo XAML que consume, tengo esto, dentro de un Grid:

  <controls:ExpandableImage 
    Grid.Column="0"
    Source="ms-appx:///Assets/icons/folder_tab.png" 
    />

Si cambio este código:

  <Image 
    Grid.Column="0" 
    Source="ms-appx:///Assets/icons/folder_tab.png" 
    />

Se muestra la imagen.

EDITAR

Aquí está el XAML para el control:

<UserControl
  x:Class="UnoTest.Shared.Controls.ExpandableImage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="using:UnoTest.Shared.Controls"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  xmlns:skia="using:SkiaSharp.Views.UWP"
  >

  <skia:SKXamlCanvas x:Name="EICanvas" PaintSurface="OnPaintSurface" />
  
</UserControl>
0
Peri Hartman 20 ene. 2021 a las 09:04

1 respuesta

La mejor respuesta

Su problema es básicamente que las imágenes Content no se tratan como Resources.

Si desea incluir imágenes como un recurso, deberá cambiar la Acción de compilación de ese archivo a Recurso incrustado . Una vez que cambie esto, aparecerá en el

string[] names = assembly.GetManifestResourceNames();

Llamada al método.

Notará que el nombre de la imagen será algo así como ApplicationName.Directory.ImageName.png. Deberá especificar este nombre para cargar la imagen con el

assembly.GetManifestResourceStream(imageName)

Si desea cargar datos de contenido Image y en una transmisión, puede hacerlo (no lo ha probado) con el siguiente código:

var imageUrl = "ms-appx:///Assets/SplashScreen.png";
var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri(imageUrl));
        
using(var stream = await file.OpenStreamForReadAsync())
{
   //Use your data here
}

Espero que esto ayude.-

1
pinedax 21 ene. 2021 a las 00:05