C # сохранение изображения из PictureBox - PullRequest
0 голосов
/ 12 сентября 2011

У меня есть такой код:

private void Load_Button_Click(object sender, EventArgs e)
    {
        OpenFileDialog dialog = new OpenFileDialog();            
        if (dialog.ShowDialog()==DialogResult.OK){
            MessageBox.Show(dialog.FileName,"My Application", MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
            string s; 
            s=".bmp";
            if (dialog.FileName.Substring(dialog.FileName.LastIndexOf('.')).Equals(s))
            {
                picBox_1.Load(dialog.FileName);
                BitmapFile = new Bitmap(dialog.FileName.ToString());
            }
            else {
                MessageBox.Show("Not a BMP file!");
            }
        }

    }

Итак, загрузите изображение. и есть ошибка в этом:

private void Save_Button_Click(object sender, EventArgs e)
    {
        SaveFileDialog dialog = new SaveFileDialog();
        try
        {
            if (picBox_1.Image != null)
            {
                if (dialog.ShowDialog() == DialogResult.OK)
                {
                    MessageBox.Show(dialog.FileName, "My Application", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    string s;
                    s = ".bmp";
                    if (dialog.FileName.Substring(dialog.FileName.LastIndexOf('.')).Equals(s))
                    {

                        picBox_1.Image.Save(dialog.FileName.ToString());
                        //BitmapFile.Dispose();
                    }
                    else
                    {
                        MessageBox.Show("Not a BMP file!");
                    }
                }
            }
            else
            {
                MessageBox.Show("My PicBox is empty!");
            }
        }
        catch (Exception) { MessageBox.Show("Cannot save file, error!"); }

    }

это общая ошибка GDI. Я полагаю, что я не могу записать в файл (возможно, недостаточно прав). как я могу улучшить эту ошибку?

Ответы [ 3 ]

1 голос
/ 12 сентября 2011

вы должны правильно отлавливать исключения, а не с помощью MessageBox, который ничего не говорит о том, какое именно исключение выдается!

как минимум, ваш блок улова должен выглядеть так:

catch (Exception exc)
{
  MessageBox.Show(exc.Message);
}

и я говорю как минимум, потому что на самом деле вы должны где-то регистрировать исключение, используя каркас журналирования, такой как NLog или Log4Net, трассировку стека дампов и другие детали. Вы даже не можете указать точный тип Exception, если вы показываете сообщение со статической строкой, а не детали фактического исключения.

1 голос
/ 12 сентября 2011

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

Должны всплыть непредвиденные исключения, чтобы можно было быстро выявить причину их возникновения.

Смотрите здесь Рекомендации по обработке исключений .

0 голосов
/ 12 сентября 2011

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

catch (Exception ex)
{
    MessageBox.Show(this, ex.ToString(), "Error Saving Image", MessageBoxIcons.Error);
}

Кроме того, рассмотрите возможность ведения некоторого ведения журнала (для средства просмотра событий и / или текстового файла. Это позволит вам иметь простое окно сообщения, но со всеми сочными подробностями, которые можно будет извлечь из события после события.

catch (Exception ex)
{
    MessageBox.Show(this, ex.Message, "Error Saving Image", MessageBoxIcon.Error);

    // _logger is a private field on this class in this case.
    _logger.Log(ex, string.Format("Saving image to {0}", dialog.Filename))
}

Вы могли бы посмотреть Log4net среди прочего на фактическое ведение журнала, но, по крайней мере, написать класс для записать подробности исключения в просмотрщик событий .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...