2012-08-16 6 views
0

J'ai besoin de convertir octet [] en BitmapImage et l'afficher dans le contrôle d'image WPF. (img.Source = ...).octet [] vers le flux ImageSource

si je convertir comme ceci:

m_photo = new BitmapImage(); 

using (MemoryStream stream = new MemoryStream(photo.ToArray())) 
{ 
    m_photo.BeginInit(); 
    m_photo.StreamSource = stream; 
    m_photo.EndInit(); 
} 

il ne peut pas faire XAML lier à la propriété Source parce que « m_photo possède un autre flux » ... Que puis-je faire?

+0

Vous créez deux flux de mémoire, wth, n'était-ce pas supposé être 'm_photo.StreamSource = stream;'? –

+0

C'est de ma faute :) J'utilise un seul MemoryStream bien sûr, juste des problèmes de copie-passé .. Et même problème –

+0

@ArtemMakarov J'ai édité la question pour refléter ce que vous avez dit. Est-ce que 'photo.ToArray()' contient réellement une image bitmap codée (par exemple un PNG) ou est-ce un tableau de pixels? – Clemens

Répondre

1

Réglez l'option de cache à OnLoad après BeginInit

m_photo.CacheOption = BitmapCacheOption.OnLoad; 

EDIT: code complet pour le tableau bmp à la source d'image

   DrawingGroup dGroup = new DrawingGroup(); 
       using (DrawingContext drawingContext = dGroup.Open()) 
       { 
        var bmpImage = new BitmapImage(); 
        bmpImage.BeginInit(); 
        bmpImage.CacheOption = BitmapCacheOption.OnLoad; 

        bmpImage.StreamSource = new MemoryStream(photoArray); 
        bmpImage.EndInit(); 
        drawingContext.DrawImage(bmpImage, new Rect(0, 0, bmpImage.PixelWidth, bmpImage.PixelHeight)); 
        drawingContext.Close(); 
       } 
       DrawingImage dImage = new DrawingImage(dGroup); 
       if (dImage.CanFreeze) 
        dImage.Freeze(); 
       imageControl.Source = dImage; 
+0

Toujours la même exception .. –

+0

Quelle exception exactement? – Clemens

+0

Modifié pour vous donner un extrait de code sur ce que vous essayez de faire. – LadderLogic

0

Ok, je viens de solution trouvée. Si vous utilisez ce code (conversion de byte [] en bitmapSource) dans le code de la classe - vous avez cette erreur, que l'objet est dans un autre flux. Mais si créer un convertisseur (IValueConverter) et l'utiliser avec le même code de conversion en liaison XAML - tout va bien!

Merci à tous!