Save картинки (C#)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by A-Spt_N(o), 7 May 2010.

  1. A-Spt_N(o)

    A-Spt_N(o) Elder - Старейшина

    Joined:
    7 Apr 2007
    Messages:
    31
    Likes Received:
    3
    Reputations:
    1
    Закончил программку(курсовой) по работе с изображениями... возникла небольшая проблема с сохранением(с заменой существующего из-ия). Сохранить как - работает, все четко, все отлично... а вот замена, что то не получается....

    Вот исходники двух методов (загрузки изображения и пересохранения):

    Code:
    
    public void LoadImage()
            {
                openFileDialog.Filter = "Изображение JPG (*.jpg)|*.jpg|" +
                                        "Изображение BMP (*.bmp)|*.bmp|" +
                                        "Изображение PNG (*.png)|*.png";
    
                DialogResult openResult = openFileDialog.ShowDialog();
                if (openResult == DialogResult.Cancel)
                    return;
    
                fileName = openFileDialog.FileName;
                if (fileName == null || fileName == "")
                    MessageBox.Show("Ошибка открытия файла", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                else
                {
                    try
                    {
                        viewer = source = Image.FromFile(fileName);
    
                        if (source.Width >= pictureBox.Width ||
                           source.Height >= pictureBox.Height)
                        {
                            pictureBox.Image = ImageSizeChange(pictureBox.Width, pictureBox.Height);
                        }
                        else
                        {
                            pictureBox.Image = source;
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Не удалось загрузить файл: " + ex.Message);
                    }
                }
    
                width_textBox.Text = (source.Width).ToString();
                height_textBox.Text = (source.Height).ToString();
            }
    
    public void SaveImage()
            {
                if (source != viewer)
                {
                    try
                    {
                        viewer.Save(fileName);
                        MessageBox.Show("Файл сохранен!", "Удачное сохранение", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        //source = Image.FromFile(fileName);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Не удалось сохранить файл: " + ex.Message);
                    }
                }
                else
                {
                    MessageBox.Show("Файл не был изменен", "Неудачное сохранение", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
    
    
    При попытке сохранить срабатывает catch и выдается следующее сообщение - В GDI возникла ошибка общего вида!!!

    Пробовал дебажить с Брекпоинтом... переменные заполнены правильно, путь тоже существует, однако сэйф все равно не проходил:(

    У кого нить есть предположения в чем может быть problem???
     
  2. A-Spt_N(o)

    A-Spt_N(o) Elder - Старейшина

    Joined:
    7 Apr 2007
    Messages:
    31
    Likes Received:
    3
    Reputations:
    1
    Что не у кого нет вариантов почему может происходить ошибка???
     
  3. Juda

    Juda Elder - Старейшина

    Joined:
    2 Aug 2008
    Messages:
    48
    Likes Received:
    8
    Reputations:
    0
    Есть варианты. выложи весь свой проект. Этот исходник не полный. :)
     
  4. JnK

    JnK Elder - Старейшина

    Joined:
    30 Mar 2007
    Messages:
    125
    Likes Received:
    21
    Reputations:
    0
    A-Spt_N(o), Может проще перед сохранением, удалять предыдущее изображение?

    1. Проверил, если файл существует.
    2. Удалил.
    3. Сохранил.
     
  5. A-Spt_N(o)

    A-Spt_N(o) Elder - Старейшина

    Joined:
    7 Apr 2007
    Messages:
    31
    Likes Received:
    3
    Reputations:
    1
    Смысла в этом особого не вижу... ошибка где то здесь должна быть. я выложил два основных метода с которыми может быть связана ошибка...

    В остальных участках кода загруженное изображение растягивается, сжимается, уменьшается по процентно и тому подобное.
     
  6. A-Spt_N(o)

    A-Spt_N(o) Elder - Старейшина

    Joined:
    7 Apr 2007
    Messages:
    31
    Likes Received:
    3
    Reputations:
    1
    ну в принципе вариант... однако я думаю ты сам понимаешь, что с точки зрения разработки ПО - это не самый лучший вариант:(

    у меня был вариант что ошибка возникает потому, что я пытаюсь писать в ОТКРЫТЫЙ файл... однако насколько я понимаю после загрузки изображения файл закрывается автоматически и не используется.
     
  7. JnK

    JnK Elder - Старейшина

    Joined:
    30 Mar 2007
    Messages:
    125
    Likes Received:
    21
    Reputations:
    0
    Возможны проблемы если файл только для чтения?
    или он действительно занят другим процессом.

    P.s. А попробуй создать 2 файла. Img1 , Img2. Загружаешь Img1 выполняешь действия а сохраняешь в Img2. если произойдет удачно, тогда просто не освобождаешь дескриптор.
     
    1 person likes this.
  8. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    1. http://www.google.ru/search?hl=ru&newwindow=1&ei=plPmS5OyHomnOK-44dsN&sa=X&oi=spell&resnum=0&ct=result&cd=1&ved=0CCAQBSgA&q=%D0%92+GDI%2B+%D0%B2%D0%BE%D0%B7%D0%BD%D0%B8%D0%BA%D0%BB%D0%B0+%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0+%D0%BE%D0%B1%D1%89%D0%B5%D0%B3%D0%BE+%D0%B2%D0%B8%D0%B4%D0%B0&spell=1

    2. http://www.sql.ru/forum/actualthread.aspx?tid=622774
     
    1 person likes this.
  9. A-Spt_N(o)

    A-Spt_N(o) Elder - Старейшина

    Joined:
    7 Apr 2007
    Messages:
    31
    Likes Received:
    3
    Reputations:
    1
    Ошибку свою понял:))) всем кто помог большое спасибо, к репе накинул)
     
    #9 A-Spt_N(o), 9 May 2010
    Last edited: 9 May 2010