0

J'essaie de créer un objet image avec un tableau d'octets comme source. Qu'est-ce que je fais mal?Je tente de créer un objet image avec une matrice d'octets comme source. Qu'est-ce que je fais mal?

Une exception est levée lorsque j'essaie d'initialiser l'objet image avec un tableau d'octets comme données sources. L'exception est indiquée dans mon code, ci-dessous.

public class MyClass 
{ 
    publuc System.Windows.Media.Imaging.BitmapImage InstanceImage { get; set; } 

    public void GetImage() 
    { 
     // Retrieves a list of custom "Item" objects that contain byte arrays. 
     // ScvClnt is our service client. The PollQueue method is designed to return information to us. 
     lstQueue = SvcClnt.PollQueue(1); 

     // This condition always evaluates as True, since we requested exactly 1 "Item" from the service client. 
     if (lstQueue.Count == 1) 
     { 
      // lstQueue[0].InstanceImage is a byte array containing the data from an image file. 
      // I have confirmed that it is a valid TIFF image file, by writing it to disk and opening it in MSPaint. 
      if (lstQueue[0].InstanceImage != null) 
      { 
       // This condition is also True, since the image is just under 3KB. 
       if (lstQueue[0].InstanceImage.Length > 0) 
       { 
        this.InstanceImage = new System.Windows.Media.Imaging.BitmapImage(); 
        this.InstanceImage.BeginInit(); 
        this.InstanceImage.StreamSource = new System.IO.MemoryStream(lstQueue[0].InstanceImage); 
        InstanceImage.EndInit(); 
        // The call to EndInit throws a NullReferenceException. 
        // {"Object reference not set to an instance of an object."} 
        // I have confirmed that this.InstanceImage and this.InstanceImage.StreamSource are not null at this point. 
        // They are successfully assigned in the lines of code above. 
       } else InstanceImage = null; 
      } else InstanceImage = null; 
     } else InstanceImage = null; 
    } 
} 

Je n'ai aucune idée de ce qui pourrait survenir sur Terre.
Tout conseil serait grandement apprécié.

Répondre

2

This MSDN forum post utilise cet exemple comme une solution.

using (MemoryStream stream = new MemoryStream(abyteArray0)) 
{ 
    image.Source = BitmapFrame.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); 
} 

//The field image should be of type System.Windows.Controls.Image. 

I utilisé la méthode BitmapFrame.Create qui ne prend que le courant en tant que paramètre, et cela a fonctionné comme un charme.

3

Je ne suis pas sûr que je suis ce que vous essayez de faire avec votre classe au premier coup d'oeil, mais pour répondre à la question initiale, donner un coup de feu ce:

public static Image ConvertByteArrayToImage(byte[] byteArrayIn) 
    { 
     MemoryStream ms = new MemoryStream(byteArrayIn); 
     Image returnImage = Image.FromStream(ms); 
     return returnImage; 
    } 
+0

Intéressant .... Lemme donne un coup de feu. – Giffyguy

+0

Je crois que c'est une solution pour .NET 2.0 ou similaire. Je travaille dans .NET 3.5 en utilisant WPF. Par conséquent, je n'utilise pas System.Drawing – Giffyguy