c#save overwrite image error

时间:2014-04-07 00:24:05

标签: c# save gdi+ overwrite

我试图保存我正在使用的文件即时获取GDI +错误,因为即时通讯尝试保存使用的源文件。任何解决方案?

示例:

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;
}

2 个答案:

答案 0 :(得分:1)

the documentation for this constructor。特别是以下部分:

  

文件保持锁定状态,直到丢弃位图。

您必须先保存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(); 。因此,使用不同的变量:

{{1}}

答案 1 :(得分:0)

当您使用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 Bitmap documentation

  

文件保持锁定状态,直到丢弃位图。