效果
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
中的图片时没有成功,可能是因为某些原因导致图片资源没有被正确释放。以下是一些可能的原因和解决方案:
-
确保正确的图片路径:首先确认你提供给
PictureBox
的图片路径是正确的。如果路径错误,图片可能无法正确加载和释放。 -
使用
Image.FromStream
方法:有时直接从文件加载图片(使用Image.FromFile
)可能会导致文件锁定。你可以尝试先将图片读入一个流中,然后从流中创建图片,这样可以避免直接锁定文件。using (FileStream stream = new FileStream("图片路径", FileMode.Open, FileAccess.Read)) { pictureBox1.Image = Image.FromStream(stream); }
在这种情况下,不要忘记在修改图片前释放流和图片资源。
-
关闭其他占用图片的应用程序:确保没有其他应用程序(如图片查看器或编辑器)正在使用或锁定该图片。
-
检查是否有异常:在代码中添加异常处理,以检查是否有任何错误导致图片无法释放。
try { if (pictureBox1.Image != null) { pictureBox1.Image.Dispose(); pictureBox1.Image = null; } } catch (Exception ex) { MessageBox.Show("释放图片时发生错误: " + ex.Message); }
-
使用
Invoke
确保线程安全:如果你的图片释放操作在非UI线程中执行,确保你使用Invoke
方法来在 UI 线程中执行这些操作。
如果上述方法都无法解决问题,可能需要进一步检查代码中是否有其他地方对图片进行了引用,或者考虑使用不同的方法来加载和处理图片。在某些情况下,重启应用程序或计算机可以解决因资源锁定导致的问题。
在 C# 中,如果你使用 PictureBox
控件来显示图片,并希望在修改图片之前先释放它以避免占用问题,你可以按照以下步骤进行:
-
释放当前图片:在修改图片之前,你需要先释放
PictureBox
当前显示的图片。这可以通过将PictureBox.Image
属性设置为null
来实现。 -
修改图片:在图片被释放之后,你可以对图片文件进行修改,例如重命名、编辑或替换等。
-
重新加载图片:修改完成后,你可以再次将修改后的图片加载到
PictureBox
中。
以下是一个示例代码,演示了如何实现这个过程:
// 假设你的PictureBox名为pictureBox1
// 释放pictureBox当前显示的图片
if(pictureBox1.Image != null)
{
pictureBox1.Image.Dispose();
pictureBox1.Image = null;
}
// 在这里进行图片的修改操作
// ...
// 重新加载修改后的图片到pictureBox
pictureBox1.Image = Image.FromFile("图片路径");
请注意,当你释放图片资源时,确保图片不再被其他进程或控件使用。此外,在重新加载图片之前完成所有的修改操作,以避免资源占用导致的错误。