Параметр недопустим при извлечении изображения

#c# #mysql #c#-4.0

#c# #mysql #c #-4.0

Вопрос:

 string nama = dgGambar1.Rows[e.RowIndex].Cells["nama_gambar"].FormattedValue.ToString();
btnTambahDataBarang.Enabled = false;
koneksi.Open();
MySqlCommand command = new MySqlCommand("SELECT * FROM and_bwi_gambar WHERE nama_gambar = '"   nama   "'", koneksi);
MySqlDataReader rd;
rd = command.ExecuteReader();
while (rd.Read())
{
  txtGambar1.Text = rd.GetValue(2).ToString();
  byte[] img = (byte[])rd.GetValue(3);
  MemoryStream ms = new MemoryStream(img);
  pbGambar1.Image = Image.FromStream(ms);
}
koneksi.Close();
 

когда я получаю изображение, размер которого превышает 250 КБ, оно всегда выдает ошибку «недопустимый аргумент параметра»

Комментарии:

1. Какая строка кода вызывает ошибку?

2. Вы должны использовать аргументы привязки вместо интерполяции текста в новой MySqlCommand, чтобы избежать SQL-инъекции. Кроме того, назовите столбцы, а не используйте * .

3. @RobertHarvey ошибка строки на изображении. FromStream (мс);

4. Фраза «Недопустимый аргумент параметра» не используется в Google. Пожалуйста, укажите точную формулировку сообщения об ошибке, которое вы получаете.

5. @Ferdy Вы проверили, что данные изображения не повреждены. Метод Image. FromStream возвращает исключение ArgumentException, когда передаваемый вами поток не имеет допустимого формата изображения.

Ответ №1:

Для решения этой проблемы может быть 2 варианта:

  1. использование преобразователя изображений:
     byte[] buffer = (byte[])rd.GetValue(3);
    using(var memStream = new MemoryStream(buffer))
    {
        var ic = new System.Drawing.ImageConverter();
        pbGambar1.Image = (System.Drawing.Image)ic.ConvertFrom(stream.ReadAllBytes());
    }
 
  1. или попробуйте сначала загрузить двоичные данные в поток памяти:
     byte[] buffer = (byte[])rd.GetValue(3);
    using(var memStream = new MemoryStream(buffer))
    {
        memStream.Position = 0;
        pbGambar1.Image = System.Drawing.Image.FromStream(memStream, false);
    }
}