C# 保存覆盖图像错误

本文关键字:图像 错误 覆盖图 覆盖 保存 | 更新日期: 2023-09-27 17:57:14

我试图保存我正在使用的文件,我收到GDI+错误,因为我试图保存im使用的源文件。有什么解决办法吗?

例:

private void Form1_Load(object sender, EventArgs e)
{
   Bitmap sourceImage = new Bitmap("images/sourceImage.jpg");
   sourceImage = CropBitmap(sourceImage, 0, 0, sourceImage.Width, 50);
   sourceImage.Save("images/sourceImage.jpg", ImageFormat.Jpeg);
}
public Bitmap CropBitmap(Bitmap bitmap, int cropX, int cropY, int cropWidth, int cropHeight)
{
    Rectangle rect = new Rectangle(cropX, cropY, cropWidth, cropHeight);
    Bitmap cropped = bitmap.Clone(rect, bitmap.PixelFormat);
    return cropped;
}

C# 保存覆盖图像错误

请参阅此构造函数的文档。具体来说,该部分如下:

在释放位图之前,文件将保持锁定状态。

在保存新sourceImage之前,必须先释放。因此,请使用不同的变量:

var sourceImage = new Bitmap("images/sourceImage.jpg");
var croppedImage = CropBitmap(sourceImage, 0, 0, sourceImage.Width, 50);
sourceImage.Dispose();
croppedImage.Save("images/sourceImage.jpg", ImageFormat.Jpeg);
croppedImage.Dispose();
当您将

sourceImage 替换为 CropBitmap 中的引用时,原始文件仍处于打开状态。从文件中读取它后,您必须Dispose它,打开一个新Bitmap并保存它以覆盖现有文件。

private void Form1_Load(object sender, EventArgs e)
{
    Bitmap sourceImage = new Bitmap("images/sourceImage.jpg");
    Bitmap targetImage = CropBitmap(sourceImage, 0, 0, sourceImage.Width, 50);
    sourceImage.Dispose();
    targetImage.Save("images/sourceImage.jpg", ImageFormat.Jpeg);
}

MSDN 位图文档

在释放位图之前,文件将保持锁定状态。