我有一个用
打开的临时图像文件Bitmap CapturedImg = (Bitmap)Image.FromFile("Item/Item.bmp");
因为是temp我想用另一个图像替换它以供进一步使用,但程序仍在使用该图像,我无法做任何事情。
如何放弃图像才能被替换?
答案 0 :(得分:2)
来自MSDN
文件保持锁定状态,直到图像被丢弃。
从文件流中读取图像
using( FileStream stream = new FileStream( path, FileMode.Open, FileAccess.Read ) )
{
image = Image.FromStream( stream );
}
答案 1 :(得分:2)
我有一个类似的问题,无法使用,因为该文件被一些异步代码覆盖。我通过复制Bitmap并释放原始Bitmap来解决了这个问题:
Bitmap tmpBmp = new Bitmap(fullfilename);
Bitmap image= new Bitmap(tmpBmp);
tmpBmp.Dispose();
答案 2 :(得分:1)
尝试使用此语法
using (Bitmap bmp = (Bitmap)Image.FromFile("Item/Item.bmp"))
{
// Do here everything you need with the image
}
// Exiting the block, image will be disposed
// so you should be free to delete or replace it
答案 3 :(得分:0)
using (var stream = System.IO.File.OpenRead("Item\Item.bmp"))
{
var image= (Bitmap)System.Drawing.Image.FromStream(stream)
}
答案 4 :(得分:0)
您也可以试试这个。
BitmapImage bmpImage= new BitmapImage();
bmpImage.BeginInit();
Uri uri = new Uri(fileLocation);
bmpImage.UriSource = uri;
bmpImage.CacheOption = BitmapCacheOption.OnLoad;
bmpImage.EndInit();
return bmpImage;
答案 5 :(得分:0)
这就像:
public Bitmap OpenImage(string filePath) =>
return new Bitmap(filePath).Clone();
或者像这样:
public Bitmap OpenImage(string filePath)
{
using (Bitmap tmpBmp = (Bitmap)Image.FromFile(filePath))
{
return new Bitmap(tmpBmp);
}
}
或者像这样:
public Bitmap OpenImage(string filePath)
{
using (var stream = System.IO.File.OpenRead(filePath))
{
return (Bitmap)System.Drawing.Image.FromStream(stream);
}
}