BitmapImage img = new BitmapImage(new Uri("somepath",UriKind.Relative)); WriteableBitmap wbm = new WriteableBitmap(img);
Je reçois une erreur d’exécution à la ligne ci-dessus: “La référence à un object n’est pas définie sur une instance d’object.”
La raison pour laquelle vous obtenez l’exception de référence null est que la valeur par défaut de la propriété BitmapCreateOptions.DelayCreation
est BitmapCreateOptions.DelayCreation
. Vous pouvez le définir sur BitmapCreateOptions.None
et créer WriteableBitmap
après le chargement de l’image:
BitmapImage img = new BitmapImage(new Uri("somepath",UriKind.Relative)); img.CreateOptions = BitmapCreateOptions.None; img.ImageOpened += (s, e) => { WriteableBitmap wbm = new WriteableBitmap((BitmapImage)s); };
Si l’action de génération de votre fichier image est définie sur ressource, le code suivant fonctionnera.
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);
Notez que la méthode statique GetResourceStream définie par la classe d’application accède à la ressource. Maintenant, si vous modifiez l’action de construction du fichier en Contenu plutôt qu’en Ressource, vous pouvez considérablement simplifier l’identifiant Uri.
Uri uri = new Uri("Images/image.jpg", UriKind.Relative);
La différence, au cas où vous vous le demanderiez … Si vous accédez au répertoire Bin / Debug d’un projet Visual Studio et trouvez le fichier XAP contenant votre programme, renommez-le en une extension ZIP. Et regarde à l’intérieur.
Dans les deux cas, le bitmap est généralement stocké quelque part dans le fichier XAP.