Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Save картинки (C#) (https://forum.antichat.xyz/showthread.php?t=202437)

A-Spt_N(o) 07.05.2010 20:16

Save картинки (C#)
 
Закончил программку(курсовой) по работе с изображениями... возникла небольшая проблема с сохранением(с заменой существующего из-ия). Сохранить как - работает, все четко, все отлично... а вот замена, что то не получается....

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

Код:


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???

A-Spt_N(o) 07.05.2010 22:53

Что не у кого нет вариантов почему может происходить ошибка???

Juda 08.05.2010 23:18

Есть варианты. выложи весь свой проект. Этот исходник не полный. :-)

JnK 09.05.2010 09:43

A-Spt_N(o), Может проще перед сохранением, удалять предыдущее изображение?

1. Проверил, если файл существует.
2. Удалил.
3. Сохранил.

A-Spt_N(o) 09.05.2010 09:52

Смысла в этом особого не вижу... ошибка где то здесь должна быть. я выложил два основных метода с которыми может быть связана ошибка...

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

A-Spt_N(o) 09.05.2010 09:55

Цитата:

Сообщение от JnK
A-Spt_N(o), Может проще перед сохранением, удалять предыдущее изображение?

1. Проверил, если файл существует.
2. Удалил.
3. Сохранил.

ну в принципе вариант... однако я думаю ты сам понимаешь, что с точки зрения разработки ПО - это не самый лучший вариант:(

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

JnK 09.05.2010 10:02

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

P.s. А попробуй создать 2 файла. Img1 , Img2. Загружаешь Img1 выполняешь действия а сохраняешь в Img2. если произойдет удачно, тогда просто не освобождаешь дескриптор.

W!z@rD 09.05.2010 10:20

1. http://www.google.ru/search?hl=ru&newwindow=1&ei=plPmS5OyHomnOK-44dsN&sa=X&oi=spell&resnum=0&ct=result&cd=1&ved=0C CAQBSgA&q=%D0%92+GDI%2B+%D0%B2%D0%BE%D0%B7%D0%BD%D 0%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

A-Spt_N(o) 09.05.2010 10:33

Ошибку свою понял:))) всем кто помог большое спасибо, к репе накинул)


Время: 15:19