Ошибка при сохранении изображения, полученного из БД - PullRequest
0 голосов
/ 30 августа 2018

Вот ситуация:

  1. Я могу сохранить () запись сотрудника с изображением из PixPictureBox в базу данных.
  2. Если я отредактирую запись сотрудника и изменит изображение PixPictureBox с новым, Update () работает нормально.
  3. Именно здесь и происходит ошибка: всякий раз, когда я редактирую запись Employee и не изменяю изображение PixPictureBox, метод Update() выдает следующее исключение:

$ exception {"Произошла общая ошибка в GDI +."} System.Runtime.InteropServices.ExternalException

Эта ошибка вызывается этим методом:

private byte[] ImageToByteArray(Image imageIn)
{
    using (var ms = new MemoryStream())
    {
        imageIn.Save(ms, imageIn.RawFormat);
        return ms.ToArray();
    }
}

Это мой GetParams() метод, в котором используется ImageToByteArray:

private void GetParams()
{
    Ebm.ResetParams();
    Ebm.Params.Id = IdTextBox.Text.GetInt();
    Ebm.Params.EmployeeCode = Ebm.GenerateEmployeeCode();
    Ebm.Params.LastName = LastNameTextBox.Text;
    Ebm.Params.FirstName = FirstNameTextBox.Text;
    Ebm.Params.MiddleName = MiddleNameTextBox.Text;
    Ebm.Params.GenderId = GenderBox.SelectedValue.GetInt();
    Ebm.Params.BirthDate = BirthDatePicker.Value.GetDateTime();
    Ebm.Params.Age = AgeTextBox.Text.GetInt();
    Ebm.Params.Salary = SalaryTextBox.Text.GetDecimal();
    Ebm.Params.StatId = 1;

    if (PixPictureBox.Image != null)
    {
        Ebm.Params.Pics = ImageToByteArray(PixPictureBox.Image);
    }              
}

Вот метод, который я использую для загрузки изображения из базы данных в PixPictureBox

private Image ByteArrayToImage(byte[] bytesArr)
{
   using (var memstr = new MemoryStream(bytesArr))
   {
          Image img = Image.FromStream(memstr);
          return img;
   }
}

Вот как я его загружаю:

private void LoadDetails()
{
    IdTextBox.Text = Ebm.Item.Id.GetString();
    EmployeeCodeTextBox.Text = Ebm.Item.EmployeeCode;
    LastNameTextBox.Text = Ebm.Item.LastName;
    FirstNameTextBox.Text = Ebm.Item.FirstName;
    MiddleNameTextBox.Text = Ebm.Item.MiddleName;
    GenderBox.SelectedValue = Ebm.Item.GenderId;
    BirthDatePicker.Value = Ebm.Item.BirthDate;
    AgeTextBox.Text = Ebm.Item.Age.GetString();
    SalaryTextBox.Text = Ebm.Item.Salary.GetString();

    try
    {
        PixPictureBox.Image = ByteArrayToImage(Ebm.Item.Pics);
    }
    catch (Exception ex)
    {
        PixPictureBox.Image = null;
    }

}

Я также получаю эту ошибку от MemoryStream, которая, я думаю, связана с исключением:

enter image description here

1 Ответ

0 голосов
/ 30 августа 2018

Мне просто нужно было изменить метод ByteArrayToImage() на этот:

private Image ByteArrayToImage(byte[] bytesArr)
{
    var mem = new MemoryStream(bytesArr);
    Image img = Image.FromStream(mem);
    return img;
}
...