133 votes

Conversion de tableau d'octets en image

Je veux convertir un tableau d'octets en image.

Voici mon code de base de données d'où je récupère le tableau d'octets :

 public void Get_Finger_print()
{
    try
    {
        using (SqlConnection thisConnection = new SqlConnection(@"Data Source=" + System.Environment.MachineName + "\\SQLEXPRESS;Initial Catalog=Image_Scanning;Integrated Security=SSPI "))
        {
            thisConnection.Open();
            string query = "select pic from Image_tbl";// where Name='" + name + "'";
            SqlCommand cmd = new SqlCommand(query, thisConnection);
            byte[] image =(byte[]) cmd.ExecuteScalar();
            Image newImage = byteArrayToImage(image);
            Picture.Image = newImage;
            //return image;
        }
    }
    catch (Exception) { }
    //return null;
}

Mon code de conversion :

 public Image byteArrayToImage(byte[] byteArrayIn)
{
    try
    {
        MemoryStream ms = new MemoryStream(byteArrayIn,0,byteArrayIn.Length);
        ms.Write(byteArrayIn, 0, byteArrayIn.Length);
        returnImage = Image.FromStream(ms,true);//Exception occurs here
    }
    catch { }
    return returnImage;
}

Lorsque j'arrive à la ligne avec un commentaire, l'exception suivante se produit : Parameter is not valid.

Comment puis-je corriger ce qui cause cette exception ?

135voto

Holstebroe Points 1882

Vous écrivez deux fois dans votre flux de mémoire, vous ne supprimez pas non plus le flux après utilisation. Vous demandez également au décodeur d'image d'appliquer la correction des couleurs intégrée.

Essayez plutôt ceci :

 using (var ms = new MemoryStream(byteArrayIn))
{
    return Image.FromStream(ms);
}

99voto

RenniePet Points 2388

Peut-être qu'il me manque quelque chose, mais pour moi, ce one-liner fonctionne bien avec un tableau d'octets qui contient une image d'un fichier JPEG.

 Image x = (Bitmap)((new ImageConverter()).ConvertFrom(jpegByteArray));

ÉDITER:

Voir ici pour une version mise à jour de cette réponse : Comment convertir une image dans un tableau d'octets

30voto

Ali Gh Points 192
public Image byteArrayToImage(byte[] bytesArr)
{
    using (MemoryStream memstr = new MemoryStream(bytesArr))
    {
        Image img = Image.FromStream(memstr);
        return img;
    }
}

6voto

Yahia Points 49011

essayez (MISE À JOUR)

 MemoryStream ms = new MemoryStream(byteArrayIn,0,byteArrayIn.Length);
ms.Position = 0; // this is important
returnImage = Image.FromStream(ms,true);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X