Перезаписать картинку-картинку в C #

Я делаю одно приложение, я добавляю поле для картинок, чтобы добавить изображение к некоторым продуктам, у меня есть один вопрос, я хотел бы редактировать изображения, уже добавленные к одному продукту, как я могу это сделать? Это мой собственно код.

private void pbImagenEquipo_DoubleClick(object sender, EventArgs e)
{
    ofdImagenes.Filter = "Imagenes JPG (*.jpg)|*.jpg; *.jpeg;|Imagenes PNG (*.png)|*.png";
    DialogResult resp = ofdImagenes.ShowDialog();
    if (resp == DialogResult.OK)
    {
        Bitmap b = new Bitmap(ofdImagenes.FileName);
        string [] archivo = ofdImagenes.FileName.Split('.');
        nombre = "Equipo_" + lbID+ "." + archivo[archivo.Length-1];

        b.Save(Path.Combine(Application.StartupPath, "Imagenes", nombre));

        pbImagenEquipo.Image = b;

    }
}

Но когда я пытаюсь заменить изображение, я получаю эту ошибку:

An unhandled exception of type 'System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.dll

Additional information: Error generoc in e GDI+.
 Tom09 июн. 2016 г., 23:59
Под «я хотел бы отредактировать изображения, уже добавленные в один продукт», вы имеете в виду позволить пользователю выбрать новый файл и перезаписать исходный файл И обновить изображение в пользовательском интерфейсе? и в какую строку выдается ошибка? новый растр? b.Save? Изображение = б?
 Fernando10 июн. 2016 г., 00:27
@ Тома, да, это верно. «Вы имеете в виду позволить пользователю выбрать новый файл и перезаписать исходный файл И обновить изображение в пользовательском интерфейсе?» У меня есть ошибка в этой строке: b.Save (Path.Combine (Application.StartupPath, "Imagenes", nombre));

Ответы на вопрос(1)

документация говорит:

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

Есть два варианта. Один из них - удалить файл перед записью.

Другой - использовать поток для его записи. Я предпочитаю последнее ..

string fn = "d:\\xyz.jpg";

// read image file
Image oldImg = Image.FromFile(fn);

// do something (optional ;-)
((Bitmap)oldImg).SetResolution(123, 234);

// save to a memorystream
MemoryStream ms = new MemoryStream();
oldImg.Save(ms, ImageFormat.Jpeg);

// dispose old image
oldImg.Dispose();

// save new image to same filename
Image newImage = Image.FromStream(ms);
newImage.Save(fn);

Обратите внимание, что сохранениеjpeg файлы часто достигают лучшего качества, если вы берете под контроль параметры кодирования. использованиеэта перегрузка за это..

Также обратите внимание, что так как нам нужнорасполагать изображения, которое вы должны убедиться, что оно нигде не используется, как вPictureBox.Image! Если это так, установите его наnull там до утилизации:pictureBox1.Image = null; !

Для решения проблемы удаления старого файла см.Вот

Ваш ответ на вопрос