Ошибка "Параметр недействителен" при преобразовании байтов в изображение

Я преобразовываю байты в изображение, но получаю сообщение об ошибке

Параметр недействителен

Я вставляю свой код. Пожалуйста, проверьте код и предположите, что я делаю правильно или неправильно.

Image arr1 = byteArrayToImage(Bytess);

Это функция.

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);
          }
    }

Я применил много методов и решений, но для меня это не сработало

Ваш ответ будет оценен.

Спасибо

Ответ 1

попробуйте это

    public Image byteArrayToImage(byte[] byteArrayIn)
    {

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

        return img;
    }

Ответ 2

Попробовав много вещей, я нашел способ, который имеет немного больше контроля. В этом примере вы можете указать формат пикселей и скопировать байты в битмап.

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

попробуйте это,

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

Ответ 4

            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);

Ответ 5

Проблема заключается в том, что вы приводите ее неправильно из базы данных. Попробуйте изменить свой код следующим образом:

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

Ответ 6

В моем случае я получил ошибку, так как моя строка base64 имела неправильную кодировку перед вызовом Image.FromStream. Это сработало для меня в конце:

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);
}