Я пытаюсь обрезать jpeg-файл, используя (x, y) координаты, ширину и высоту и сохранить вывод в том же месте (например, заменить). Я попробовал приведенный ниже код, но не работал.Как обрезать и сохранить файл изображения jpeg в C#
public void CropImage(int x, int y, int width, int height)
{
string image_path = @"C:\Users\Admin\Desktop\test.jpg";
var img = Image.FromFile(image_path);
Rectangle crop = new Rectangle(x, y, width, height);
Bitmap bmp = new Bitmap(crop.Width, crop.Height);
using (var gr = Graphics.FromImage(bmp))
{
gr.DrawImage(img, new Rectangle(0, 0, bmp.Width, bmp.Height), crop, GraphicsUnit.Pixel);
}
if (System.IO.File.Exists(image_path))
{
System.IO.File.Delete(image_path);
}
bmp.Save(image_path, ImageFormat.Jpeg);
}
Это дает ошибку, как:
исключение типа 'System.IO.IOException' произошло в mscorlib.dll, но не был обработан в пользовательском коде
Дополнительная информация : Процесс не может получить доступ к файлу 'C: \ Users \ Admin \ Desktop \ test.jpg', потому что он используется другим процессом .
Когда я добавляю img.Dispose()
я не получаю вышеуказанную ошибку, и я в состоянии спасти it.But он сохраняет пустое изображение с заданной шириной и высотой.
Может ли кто-нибудь помочь мне с этим?
Старое изображение по-прежнему заблокировано вашим кодом. Вы можете выбрать другое имя или прочитать одно из сообщений о том, как разблокировать. Поиск 'C# Сохранить jpeg IOException' – TaW
@TaW, Даже когда я даю новый путь, я получал пустое изображение с заданной шириной и высотой –
It не должно быть пустым, если вы не избавитесь от него. Наблюдайте за порядком Rectangles! См. [Здесь] (https://msdn.microsoft.com/en-us/library/ms142040%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396) – TaW