无法删除图像(正在使用)C#

问题描述 投票:0回答:1

我在这里想做的是:

  • 下载图片
  • 将其保存到磁盘
  • 调整大小等
  • 用新名称保存
  • 删除旧图像

我已经实现了一切,但还没有迈出最后一步。我收到“文件正在使用”错误。

这是代码:

            filenameb = "img-1b.jpg";//old img
            fullpathb = Path.Combine(dir, filenameb);//old img path
            //downloading using imglink
            client.DownloadFile(imglink, fullpathb);//save old img as %dir%\img-1b.jpg
            //until here I downloaded the "old" img

            filename = "img-1.jpg";//new img
            fullpath = Path.Combine(dir, filename);//new img path
            //name and fullpath for the "new img" are set

            Image imgresize = Image.FromFile(fullpathb);//give old img path
            imgresize = FixedSize(imgresize);//resize
            imgresize.Save(fullpath, ImageFormat.Jpeg);//save new img as %dir%\img-1.jpg

            //EVERYTHING WORKS PERFECTLY UP TO HERE

            imgresize.Dispose();//dispose -has old img path
            System.IO.File.Delete(fullpathb);//delete old img

我还将图像设置为FixedSize。 如果需要的话,这是“FixedSize”的代码:

    //kind of messed up to save some space
    static Image FixedSize(Image imgPhoto)
    {
        int Width = 300;int Height = 250;
        int sourceWidth = imgPhoto.Width;int sourceHeight = imgPhoto.Height;
        int sourceX = 0;int sourceY = 0;int destX = 0;int destY = 0;
        float nPercent = 0;float nPercentW = 0;float nPercentH = 0;

        nPercentW = ((float)Width / (float)sourceWidth);
        nPercentH = ((float)Height / (float)sourceHeight);

        if (nPercentH < nPercentW){ nPercent = nPercentH;
            destX = (int)((Width - (sourceWidth * nPercent)) / 2);}
        else { nPercent = nPercentW;
            destY = (int)((Height - (sourceHeight * nPercent)) / 2); }

        int destWidth = (int)(sourceWidth * nPercent);
        int destHeight = (int)(sourceHeight * nPercent);

        Bitmap bmPhoto = new Bitmap(Width, Height, PixelFormat.Format24bppRgb);
        bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);

        Graphics grPhoto = Graphics.FromImage(bmPhoto);
        grPhoto.Clear(Color.White);
        grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;

        grPhoto.DrawImage(imgPhoto,
            new Rectangle(destX, destY, destWidth, destHeight),
            new Rectangle(sourceX, sourceY, sourceWidth, sourceHeight),
            GraphicsUnit.Pixel);

        grPhoto.Dispose();
        return bmPhoto;
    }

我对此真的很陌生,我无法意识到我做错了什么(或者我根本没有做什么)。如有任何帮助,我们将不胜感激!

c# image dispose delete-file
1个回答
0
投票
Image imgresize = Image.FromFile(fullpathb)

这将锁定文件。相反,从从文件读取的字节 MemoryStream 创建图像

byte[] imageBytes = FileReadAllBytes(fullpathb);

using (var ms = new MemoryStream(imageBytes)){
    var image = Image.FromStream(ms);
}

未经测试

© www.soinside.com 2019 - 2024. All rights reserved.