查看图像文件而不锁定它。 (复制到内存?)

时间:2012-01-31 23:09:40

标签: c# wpf windows-7-x64 file-access

我希望能够在不锁定文件的情况下打开/查看图像(.jpg)。基本上我有一个程序,让用户选择一个将覆盖图片的图片。但问题是我显示的是被覆盖的图像。那么如何在不锁定图像的情况下加载图像呢?

这是我现在必须设置图像的代码

Image1.Source = new BitmapImage( new Uri( myFilePath ) ) ); 

myFilePath等于类似“C:\ Users * \ My Pictures \ Sample.jpg”的字符串

3 个答案:

答案 0 :(得分:8)

myBitmap.CacheOption = BitmapCacheOption.OnLoad是您正在寻找的行。它“在加载时将整个映像缓存到内存中。所有对图像数据的请求都从内存存储器中填充。”来自MSDN

这样的事情:

BitmapImage bmi = new BitmapImage();
bmi.BeginInit();
bmi.UriSource = new Uri(myFilePath);
bmi.CacheOption = BitmapCacheOption.OnLoad;
bmi.EndInit();
Image1.Source = bmi;

答案 1 :(得分:1)

我认为StreamSource是您正在寻找的属性。您将图像读入MemoryStream,然后将MemoryStream设置为BitmapImage的StreamSource的值:

var memStream = new MemoryStream(File.ReadAllBytes(myFilePath));
Image1.Source = new BitmapImage() { StreamSource = memStream };
编辑:我已经尝试过这段代码,看起来你需要调用BitmapImage.BeginInit和BitmapImage.EndInit来设置源代码:

var memStream = new MemoryStream(File.ReadAllBytes(@"C:\Users\Public\Pictures\Sample Pictures\Koala.jpg"));
var img = new BitmapImage();
img.BeginInit();
img.StreamSource = memStream;
img.EndInit();
myImage.Source = img;

答案 2 :(得分:0)

当您打开文件时,您还可以选择文件的共享来定义其他程序需要该文件时的beaviour:

(来自msdn:http://msdn.microsoft.com/en-us/library/y973b725.aspx

File.Open方法(String,FileMode,FileAccess, ** FileShare **

参数
路径
类型:System.String
要打开的文件。

模式
键入:System.IO.FileMode
FileMode值,指定是否创建文件(如果文件不存在),并确定是保留还是覆盖现有文件的内容。

访问
键入:System.IO.FileAccess
FileAccess值,指定可对文件执行的操作。

*分享
*类型:System.IO.FileShare *
FileShare值,指定其他线程对文件的访问类型。