C# pictureBox显示一张图片,我想先释放这个图片以免占用无法修改,(旋转)改完再显示这张图片

2023-12-20 07:18:13

效果

在这里插入图片描述

    public static bool RotateFlip(MyDel Log, string fileName)
    {
        try
        {
            string tempPath = Path.GetTempFileName();
            using (Bitmap bmp = new Bitmap(fileName))
            {
                float resolution = 600; //x,y必须为这个数 误差小于+-1
                bmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
                bmp.Save(tempPath, System.Drawing.Imaging.ImageFormat.Bmp); //保存
                Log(fileName + "  分辨率" + (int)Math.Round(bmp.VerticalResolution) + "点,(宽" + Math.Round((bmp.Width * 25.4 / resolution)) + ",高" + Math.Round((bmp.Height * 25.4 / resolution)) + ")mm");
            }
            // 将临时文件复制回原始文件路径
            File.Copy(tempPath, fileName, true);
            File.Delete(tempPath);
            
        }
        catch (Exception e) { Log(e.Message); return false; }
        return true;
    }
}
         //pictureBox.Load(templatePathName);//无法释放
         pictureBox.Image = Image.FromFile(templatePathName);//可以释放
         //using (FileStream stream = new FileStream(templatePathName, FileMode.Open, FileAccess.Read))
         //{
         //    pictureBox.Image = Image.FromStream(stream); //可以释放
         //}

如果你发现在 C# 中尝试释放 PictureBox 中的图片时没有成功,可能是因为某些原因导致图片资源没有被正确释放。以下是一些可能的原因和解决方案:

  1. 确保正确的图片路径:首先确认你提供给 PictureBox 的图片路径是正确的。如果路径错误,图片可能无法正确加载和释放。

  2. 使用 Image.FromStream 方法:有时直接从文件加载图片(使用 Image.FromFile)可能会导致文件锁定。你可以尝试先将图片读入一个流中,然后从流中创建图片,这样可以避免直接锁定文件。

    using (FileStream stream = new FileStream("图片路径", FileMode.Open, FileAccess.Read))
    {
        pictureBox1.Image = Image.FromStream(stream);
    }
    

    在这种情况下,不要忘记在修改图片前释放流和图片资源。

  3. 关闭其他占用图片的应用程序:确保没有其他应用程序(如图片查看器或编辑器)正在使用或锁定该图片。

  4. 检查是否有异常:在代码中添加异常处理,以检查是否有任何错误导致图片无法释放。

    try
    {
        if (pictureBox1.Image != null)
        {
            pictureBox1.Image.Dispose();
            pictureBox1.Image = null;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("释放图片时发生错误: " + ex.Message);
    }
    
  5. 使用 Invoke 确保线程安全:如果你的图片释放操作在非UI线程中执行,确保你使用 Invoke 方法来在 UI 线程中执行这些操作。

如果上述方法都无法解决问题,可能需要进一步检查代码中是否有其他地方对图片进行了引用,或者考虑使用不同的方法来加载和处理图片。在某些情况下,重启应用程序或计算机可以解决因资源锁定导致的问题。

在 C# 中,如果你使用 PictureBox 控件来显示图片,并希望在修改图片之前先释放它以避免占用问题,你可以按照以下步骤进行:

  1. 释放当前图片:在修改图片之前,你需要先释放 PictureBox 当前显示的图片。这可以通过将 PictureBox.Image 属性设置为 null 来实现。

  2. 修改图片:在图片被释放之后,你可以对图片文件进行修改,例如重命名、编辑或替换等。

  3. 重新加载图片:修改完成后,你可以再次将修改后的图片加载到 PictureBox 中。

以下是一个示例代码,演示了如何实现这个过程:

// 假设你的PictureBox名为pictureBox1

// 释放pictureBox当前显示的图片
if(pictureBox1.Image != null)
{
    pictureBox1.Image.Dispose();
    pictureBox1.Image = null;
}

// 在这里进行图片的修改操作
// ...

// 重新加载修改后的图片到pictureBox
pictureBox1.Image = Image.FromFile("图片路径");

请注意,当你释放图片资源时,确保图片不再被其他进程或控件使用。此外,在重新加载图片之前完成所有的修改操作,以避免资源占用导致的错误。

文章来源:https://blog.csdn.net/chenhao0568/article/details/135080219
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。