J'utilise le code suivant pour diffuser une source d'image: "oeuvre" est l'objet XAML où l'image est censée être affichée. Le code est supposé ne pas verrouiller l'image, il ne le verrouille pas bien, mais ne le montre pas non plus et l'image par défaut devient "rien" ... Je suppose que je ne suis pas correctement en utilisant le flux, et que mon image devient nulle. Aide? P> Mise à jour: P> J'utilise maintenant le code suivant que un ami m'a suggéré: p> pour un étrange Raison, ce code renvoie l'erreur suivante: p> L'image ne peut pas être décodée. L'en-tête d'image peut être corrompu. P>
BlockQuote> Qu'est-ce que je fais mal? Je suis sûr que l'image que j'essaie de charger n'est pas corrompue. P> p>
4 Réponses :
Avez-vous essayé:
BitmapImage Art3 = new BitmapImage(); using (FileStream stream = File.OpenRead("c:\\temp\\Album.jpg")) { Art3.BeginInit(); Art3.StreamSource = stream; stream.Flush(); Art3.EndInit(); } artwork.Source = Art3;
Non, ce n'est pas mon problème, l'image n'est pas du tout chargée de la source, c'est ce que mon problème est ... :(
L'élimination du flux source provoquera le bitmapimage de ne plus afficher ce qui était dans le flux. Vous devrez garder une trace du flux et le jeter lorsque vous n'utilisez plus le bitmapimage. P>
Donc qu'est ce que je devrais faire? Vous devriez noter que j'ai commencé à programmer en C # 1 jour ...
J'ai eu ce même problème avec Bitmapimage et affectation de bitmapimage.streamsource à un flux de mémoire qui était disposé (via l'utilisation). Je devais supprimer l'utilisation pour préserver le fichier JPG. Je pensais que je devais avoir dû utiliser un jpegbitmapdecoder, mais ce n'est pas nécessaire. Merci@rossisdead!
J'ai réussi à résoudre le problème en utilisant le code suivant:
BitmapImage Art3 = new BitmapImage(); FileStream f = File.OpenRead("c:\\temp\\Album.jpg"); MemoryStream ms = new MemoryStream(); f.CopyTo(ms); ms.Seek(0, SeekOrigin.Begin); f.Close(); Art3.BeginInit(); Art3.StreamSource = ms; Art3.EndInit(); artwork.Source = Art3;
Merci, assurez-vous que mon flux de mémoire a été réinitialisé au début avant d'y utiliser ailleurs fixé mon problème (qui a jeté la même exception que la vôtre)
Ceci est probablement plus simple