如何在c#中删除打开的图片框

本文关键字:删除 | 更新日期: 2023-09-27 18:09:33

我有一个图片框。它从网络摄像头获取图像。我想从目录中删除它的图片并保存它的新图片。但是在"文件。删除(应用程序。年代……" In catch:

 The process cannot access the file '...'bin'Debug'dataBase'img'6.jpg' because it is being used by another process.
鳕鱼:

                  Bitmap bmp1 = new Bitmap(_pic_image.Image);

                    string path = Application.StartupPath + @"'dataBase'img'" + _txt_sufix.Text + ".jpg";
                    CheckIfFileIsBeingUsed(path);
                    if (System.IO.File.Exists(path))
                        System.IO.File.Delete(path);
                    bmp1.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg);
                    //_pic_image.Visible = true;
                    _pic_image.Image = bmp1;
                    _pic_image.Visible = true;
                    // Dispose of the image files.
                    bmp1.Dispose();

 public bool CheckIfFileIsBeingUsed(string fileName)
    {
        try
        {
            File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.None);
        }
        catch (Exception exp)
        {
            return true;
        }
        return false;
    }

如何在c#中删除打开的图片框

您可以使用下面的函数来加载图像而不锁定它。加载位图后,您可以删除它没有任何问题。
用法:

_pic_image.Image = OpenImageWithoutLockingIt("h:'myimage.png")


功能:

    Private Function OpenImageWithoutLockingIt(imagePath As String) As Bitmap
    If IO.File.Exists(imagePath) = False Then Return Nothing
    Using imfTemp As Image = Image.FromFile(imagePath)
        Dim MemImage As Bitmap = New Bitmap(imfTemp.Width, imfTemp.Height)
        Using g As Graphics = Graphics.FromImage(MemImage)
            g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
            g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
            g.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
            g.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
            g.Clear(Color.Transparent)
            g.DrawImage(imfTemp, 0, 0, MemImage.Width, MemImage.Height)
            Return MemImage
        End Using
    End Using
End Function

你也可以使用下面的函数删除只读文件:

    Private Function DeleteImageFile(filePath As String, DeleteAlsoReadonlyFile As Boolean) As Boolean
    Try
        If IO.File.Exists(filePath) = False Then Return True
        If DeleteAlsoReadonlyFile Then
            Dim fileInf As New FileInfo(filePath)
            If fileInf.IsReadOnly Then
                'remove readonly attribute, otherwise File.Delete throws access violation exception.
                fileInf.IsReadOnly = False
            End If
        End If
        IO.File.Delete(filePath)
        Return True
    Catch ex As Exception
        Return False
    End Try
End Function
c#代码:


   private Bitmap OpenImageWithoutLockingIt(string imagePath)
    {
        if (System.IO.File.Exists(imagePath) == false)
            return null;
        using (Image imfTemp = Image.FromFile(imagePath))
        {
            Bitmap MemImage = new Bitmap(imfTemp.Width, imfTemp.Height);
            using (Graphics g = Graphics.FromImage(MemImage))
            {
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                g.Clear(Color.Transparent);
                g.DrawImage(imfTemp, 0, 0, MemImage.Width, MemImage.Height);
                return MemImage;
            }
        }
    }
    private bool DeleteImageFile(string filePath, bool DeleteAlsoReadonlyFile)
    {
        try
        {
            if (System.IO.File.Exists(filePath) == false)
                return true;
            if (DeleteAlsoReadonlyFile)
            {
                FileInfo fileInf = new FileInfo(filePath);
                if (fileInf.IsReadOnly)
                {
                    //remove readonly attribute, otherwise File.Delete throws access violation exception.
                    fileInf.IsReadOnly = false;
                }
            }
            System.IO.File.Delete(filePath);
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }