Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2016, 10:10   #1
Maray
Форумчанин
 
Регистрация: 03.01.2015
Сообщений: 160
Восклицание Сохранение изображения с заменой

Добрый день!
Помогите, пожалуйста.
Создаю рисунок, затем его нужно сохранить.
Но, рисунок с данным именем существует. Его нужно сохранить с заменой
Использовала вот эту конструкцию
Код:
Bitmap bm = new Bitmap(panel1.Width, panel1.Height);
string s = "Pic\\p1.bmp";
bm.Save(s);
Но выдает ошибку: В GDI+ возникла ошибка общего вида.

Папка Pic находится в проекте (...\bin\Debug\Pic). Когда в ней нет файла с нужным именем, все сохраняется нормально. А мне нужно, чтобы файл заменялся.

У меня получается так, на первой форме в pictureBox1 находится изображение. С помощью кнопки я вызываю вторую форму, на которой я создаю новое изображение. После чего нажимаю на кнопку сохранить. Изображение должно замениться в папке, а затем и обновится в picturebox1 на первой форме. Попробовала вот таким способом

Код:
private void button17_Click(object sender, EventArgs e)
        {
            Bitmap bm = new Bitmap(panel1.Width, panel1.Height);
            panel1.DrawToBitmap(bm, new Rectangle(0, 0, bm.Width, bm.Height));
            pF.pictureBox1.Image = null;
            File.Delete(s);
            bm.Save(s);
            pF.pictureBox1.Image = Image.FromFile(s);
            MessageBox.Show("Фигура сохранена!", "Редактирование", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
Но теперь не удаляется старое изображение. Пишет: "Additional information: Процесс не может получить доступ к файлу "D:\WindowsFormsApplication1\Window sFormsApplication1\bin\Debug\Pic\Фи гура 'O'.bmp", так как этот файл используется другим процессом."
Хотя перед этим я обнуляю pictureBox1.Image
Maray вне форума Ответить с цитированием
Старый 19.08.2016, 19:14   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

у вас картинка открыта из файла, и файл заблокирован.

а зачем вам в данном случае вообще файл?
вы итак можете с формы на форму передать картинку, без файлов.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.08.2016, 20:37   #3
Maray
Форумчанин
 
Регистрация: 03.01.2015
Сообщений: 160
По умолчанию

Картинки хранятся в папке. При запуске программы они загружаются в pictureBox1 из этой папки. Нужно, чтобы при сохранении картинки она сохранялась с заменой старой
Maray вне форума Ответить с цитированием
Старый 20.08.2016, 22:09   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

загрузите сначала в память, а затем уже в Image.
то есть загрузка должна стать такой:
Код:
using(var fs=new FileStream(path,FileMode.Open,FileAccess.Read))
{
  var ms=new MemoryStream((int)fs.Length)
  fs.CopyTo(ms);
  ms.Position=0;
  pF.pictureBox1.Image = Image.FromStrean(ms);
}
ну а касательно вашего сохранения, нет смысла перезагружать файл с диска.
у вас уже есть картинка

Код:
private void button17_Click(object sender, EventArgs e)
        {
            Bitmap bm = new Bitmap(panel1.Width, panel1.Height);
            panel1.DrawToBitmap(bm, new Rectangle(0, 0, bm.Width, bm.Height));
            File.Delete(s);
            bm.Save(s);
            pF.pictureBox1.Image = bm;
            MessageBox.Show("Фигура сохранена!", "Редактирование", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
Цитата:
Хотя перед этим я обнуляю pictureBox1.Image
и что?
объект то не уничтожен.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.08.2016, 12:51   #5
Maray
Форумчанин
 
Регистрация: 03.01.2015
Сообщений: 160
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
загрузите сначала в память, а затем уже в Image.
то есть загрузка должна стать такой:
Код:
using(var fs=new FileStream(path,FileMode.Open,FileAccess.Read))
{
  var ms=new MemoryStream((int)fs.Length)
  fs.CopyTo(ms);
  ms.Position=0;
  pF.pictureBox1.Image = Image.FromStrean(ms);
}
ну а касательно вашего сохранения, нет смысла перезагружать файл с диска.
у вас уже есть картинка

Код:
private void button17_Click(object sender, EventArgs e)
        {
            Bitmap bm = new Bitmap(panel1.Width, panel1.Height);
            panel1.DrawToBitmap(bm, new Rectangle(0, 0, bm.Width, bm.Height));
            File.Delete(s);
            bm.Save(s);
            pF.pictureBox1.Image = bm;
            MessageBox.Show("Фигура сохранена!", "Редактирование", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
и что?
объект то не уничтожен.
Спасибо Вам за помощь!
Maray вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение нарисованного изображения kineziz Общие вопросы C/C++ 10 28.03.2013 19:44
Сохранение изображения в БД shturman1387 БД в Delphi 5 21.12.2012 17:20
сохранение изображения ВалекFCRK Общие вопросы Delphi 9 26.09.2011 21:49
сохранение изображения dedyshka Свободное общение 2 21.11.2009 23:43
Сохранение изображения с Image brutos Мультимедиа в Delphi 7 19.05.2009 12:26