2011-05-18 14 views
9
BitmapImage img = new BitmapImage(new Uri("somepath",UriKind.Relative)); 
WriteableBitmap wbm = new WriteableBitmap(img); 

Aparece un error de tiempo de ejecución en la línea superior: "Referencia de objeto no establecida en una instancia de un objeto".No puedo inicializar WriteableBitmap con BitmapImage

+0

Es "ruta" una ruta válida al archivo? ¿La acción de compilación del archivo está configurada en "Contenido" o "Recurso"? –

+0

ruta correcta e img sido Inicializada. – hashi

Respuesta

6

Si la acción de compilación de su archivo de imagen está configurada como recurso, entonces el siguiente código funcionará.

Uri uri = new Uri("/ProjectName;component/Images/image.jpg", UriKind.Relative); 
StreamResourceInfo resourceInfo = Application.GetResourceStream(uri); 
BitmapImage img = new BitmapImage(); 
img.SetSource(resourceInfo.Stream); 
WriteableBitmap wbm = new WriteableBitmap(img); 

Observe que se accede al recurso por el método estático GetResourceStream definido por la clase de aplicación. Ahora, si cambia la acción de compilación del archivo a Contenido en lugar de Recurso, puede simplificar considerablemente el Uri sintax.

Uri uri = new Uri("Images/image.jpg", UriKind.Relative); 

La diferencia, en caso de que se está preguntando ... Si se desplaza al directorio/bin de depuración de un proyecto de Visual Studio y encontrar el archivo XAP que contiene su programa, cambiar el nombre a una extensión ZIP. Y mira adentro.

En ambos casos, el mapa de bits está obvio almacenado en algún lugar dentro del archivo XAP.

  • Con una acción de compilación de recursos para el archivo, se almacena dentro del archivo DLL junto con el programa compilado.
  • Con una acción de compilación de contenido, el archivo se almacena de forma externa al archivo dll pero dentro del archivo XAP, y cuando cambia el nombre del archivo XAP a un archivo ZIP, puede verlo.
+0

esto resolvió tu problema ?? – Ariel

+0

gracias! Eso resolvió mi problema similar. –

+0

Funcionó para mí :) – JTIM

11

La razón por la que obtiene la excepción de referencia nula es que BitmapImage.CreateOptions Property el valor predeterminado es . Usted puede configurarlo para que BitmapCreateOptions.None y crear WriteableBitmap después de cargar la imagen:

BitmapImage img = new BitmapImage(new Uri("somepath",UriKind.Relative)); 
img.CreateOptions = BitmapCreateOptions.None; 
img.ImageOpened += (s, e) => 
    { 
     WriteableBitmap wbm = new WriteableBitmap((BitmapImage)s); 
    }; 
Cuestiones relacionadas