我试图使用(x,y)坐标、宽度和高度裁剪一个jpeg文件,并将输出保存在同一位置(即替换)。我尝试了下面的代码,但它不工作。
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);
}
这给出了一个错误,如。
在mscorlib.dll中发生了一个类型为 "System.IO.IOException "的异常,但在用户代码中没有被处理。
补充信息。进程无法访问文件 "C:\Users\Admin\Desktop\test.jpg",因为它正在被另一个进程使用。
当我添加 img.Dispose()
我没有出现上面的错误,我可以保存它.但它保存的是给定宽度和高度的空白图片。
谁能帮我解决这个问题?
public void CropImage(int x, int y, int width, int height)
{
string imagePath = @"C:\Users\Admin\Desktop\test.jpg";
Bitmap croppedImage;
// Here we capture the resource - image file.
using (var originalImage = new Bitmap(imagePath))
{
Rectangle crop = new Rectangle(x, y, width, height);
// Here we capture another resource.
croppedImage = originalImage.Clone(crop, originalImage.PixelFormat);
} // Here we release the original resource - bitmap in memory and file on disk.
// At this point the file on disk already free - you can record to the same path.
croppedImage.Save(imagePath, ImageFormat.Jpeg);
// It is desirable release this resource too.
croppedImage.Dispose();
}