7
votes

Pourquoi la source de streaming d'une image ne fonctionne-t-elle pas?

J'utilise le code suivant pour diffuser une source d'image: xxx

"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?

Mise à jour:

J'utilise maintenant le code suivant que un ami m'a suggéré: xxx

pour un étrange Raison, ce code renvoie l'erreur suivante:

L'image ne peut pas être décodée. L'en-tête d'image peut être corrompu.

Qu'est-ce que je fais mal? Je suis sûr que l'image que j'essaie de charger n'est pas corrompue.


0 commentaires

4 Réponses :


0
votes

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;


1 commentaires

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 ... :(



1
votes

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.


2 commentaires

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!



12
votes

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; 


1 commentaires

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)



1
votes

Ceci est probablement plus simple xxx


0 commentaires