Как изменить размер изображения перезаписав файл

304
07 июля 2022, 09:40

Есть метод для изменения размера картинки. Как сделать чтобы он перезаписывал файл. В данный момент он выдаёт ошибку

{"В GDI+ возникла ошибка общего вида."}
  public void ResizeImage(string fileName, int width, int height)
        {
            using (Image image = Image.FromFile(fileName))
            {
                new Bitmap(image, width, height).Save(fileName);
            }
        }
Answer 1

Из документации метода Save(string filename):

Exceptions: ExternalException

The image was saved with the wrong image format.

-or-

The image was saved to the same file it was created from.

Иными словами, метод не позволяет записывать Bitmap в тот же файл, из которого он был создан. Попробуйте сначала записать Bitmap в новый файл, затем удалить старый и переименовать новый файл.

Answer 2

Проще всего поступить так:

Image image = Image.FromFile(fileName);
Bitmap bitmap = new Bitmap(image, width, height);
image.Dispose();
bitmap.Save(fileName);
bitmap.Dispose();

Сперва диспозим оригинальное изображение (освобождаем ресурс - хендл, связанный с ним). После чего становится возможным сохранять в тот же файл.

В конце освобождаем ресурсы, занятые новым изображением с изменённым размером.

Можно применить using, но только для второго изображения. Потому что момент освобождения первого мы должны контролировать сами.

Image image = Image.FromFile(fileName);
using (Bitmap bitmap = new Bitmap(image, width, height))
{
    image.Dispose();
    bitmap.Save(fileName);
}
READ ALSO
Как обойти заданную директорию?

Как обойти заданную директорию?

Изначально в программе задана директория:

285
Silverlight 5 и Visul Studio 2019

Silverlight 5 и Visul Studio 2019

В общем, дело было так: Все прекрасно работало до тех пор, пока не обновил Visual Studio и не столкнулся с проблемами, когда Visual Studio не понимала синтаксис...

214
Компиляция кода запускаемого на Mac имея Visual Studio Windows

Компиляция кода запускаемого на Mac имея Visual Studio Windows

Собрал небольшое консольное приложениеПод Windows компилируется без проблем

194
Локализация проекта, не отображаются данные в дизайнере форм WPF VS2019

Локализация проекта, не отображаются данные в дизайнере форм WPF VS2019

Занимаюсь локализацией проекта основу взял здесьТестовый проект сработал полностью вопросов нет, но при переносе в свой проект в дизайнере...

225