web-dev-qa-db-fra.com

Erreur "Le paramètre n'est pas valide" lors de la conversion d'octets en image

Je convertis des octets en une image mais j'obtiens une erreur 

Le paramètre n'est pas valide 

Je colle mon code. Veuillez vérifier le code et suggérer que je faisais bien ou mal.

Image arr1 = byteArrayToImage(Bytess);

C'est la fonction.

public static Image byteArrayToImage(byte[] byteArrayIn)
{
        if (null == byteArrayIn || byteArrayIn.Length == 0)
            return null;

        MemoryStream ms = new MemoryStream(byteArrayIn);
        try
          {
            Process currentProcess1 = Process.GetCurrentProcess();
            Image returnImage = Image.FromStream(ms);
            return returnImage;
          }
        catch (Exception ex)
          {
            MessageBox.Show(ex.Message);
          }
    }

J'ai appliqué beaucoup de techniques et de solutions mais cela n'a pas fonctionné pour moi 

Votre réponse serait appréciée.

Merci

13
Umair Aslam

essaye ça

    public Image byteArrayToImage(byte[] byteArrayIn)
    {

        System.Drawing.ImageConverter converter = new System.Drawing.ImageConverter();
        Image img = (Image)converter.ConvertFrom(byteArrayIn);

        return img;
    }
8
sangram parmar

Après avoir essayé beaucoup de choses, j’ai trouvé un moyen qui permet un peu plus de contrôle ..__ Dans cet exemple, vous pouvez spécifier le format de pixel et copier les octets dans un bitmap.

byte[] buffer = GetImageBytes();
var bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb);
var bitmap_data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
Marshal.Copy(buffer, 0, bitmap_data.Scan0, buffer.Length);
bitmap.UnlockBits(bitmap_data);
var result = bitmap as Image;
3
Ertyui

Dans mon cas, j'ai eu l'erreur car ma chaîne base64 avait un mauvais encodage avant d'appeler Image.FromStream . Cela a fonctionné pour moi à la fin:

byte[] bytes = System.Convert.FromBase64String(base64ImageString);

using (MemoryStream ms = new MemoryStream(bytes))
{
    var image = Image.FromStream(ms);
    image.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);
}
0
Quantumleapr
            cmd.CommandText="SELECT * FROM `form_backimg` WHERE ACTIVE=1";

            MySqlDataReader reader6= cmd.ExecuteReader();

            if(reader6.Read())
            {
               code4 = (byte[])reader6["BACK_IMG"];   //BLOB FIELD NAME BACK_IMG
            }
            reader6.Close();

            MemoryStream stream = new MemoryStream(code4);   //code4 is a public byte[] defined on top                             
            pictureBox3.Image = Image.FromStream(stream);
0
Ankush Singhal

essaye ça,

public Image byteArrayToImage(byte[] byteArrayIn)
{
     Image returnImage = null;
     using (MemoryStream ms = new MemoryStream(byteArrayIn))    
     {   
         returnImage = Image.FromStream(ms);     
     }
     return returnImage;
}
0
Mohan Gopi

Le problème est dû au fait que vous l'apportez de manière incorrecte à partir de la base de données. Essayez de changer votre code comme ceci:

while (registry.Read())
{
   byte[] image = (byte[])registry["Image"];
}
0
user8250086