Ошибка "Параметр недействителен" при преобразовании байтов в изображение
Я преобразовываю байты в изображение, но получаю сообщение об ошибке
Параметр недействителен
Я вставляю свой код. Пожалуйста, проверьте код и предположите, что я делаю правильно или неправильно.
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);
}