Question

Je suis en train de créer un objet d'image avec un tableau d'octets comme source. Qu'est-ce que je fais mal?

Une exception est levée lorsque je tente d'initialiser l'objet de l'image avec un tableau d'octets en tant que données de source. 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 ne sais pas ce que la Terre pourrait aller mal.
Tout conseil serait apprécié.

Était-ce utile?

La solution 2

Ce forum MSDN après 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.

Autres conseils

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;
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top