我希望能够在不锁定文件的情况下打开/查看图像 (.jpg)。基本上我有一个程序,让用户选择将覆盖图片的图片。但问题是我显示正在被覆盖的图像。那么如何在不锁定图像的情况下加载图像呢?
这是我现在必须设置图像的代码
Image1.Source = new BitmapImage( new Uri( myFilePath ) ) );
myFilePath 等于一个字符串,类似于 "C:\Users*\My Pictures\Sample.jpg"
我希望能够在不锁定文件的情况下打开/查看图像 (.jpg)。基本上我有一个程序,让用户选择将覆盖图片的图片。但问题是我显示正在被覆盖的图像。那么如何在不锁定图像的情况下加载图像呢?
这是我现在必须设置图像的代码
Image1.Source = new BitmapImage( new Uri( myFilePath ) ) );
myFilePath 等于一个字符串,类似于 "C:\Users*\My Pictures\Sample.jpg"
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;
我认为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;
当您打开一个文件时,您还可以选择文件的共享来定义它在另一个程序需要该文件时的行为:
(来自 msdn:http: //msdn.microsoft.com/en-us/library/y973b725.aspx)
File.Open 方法(字符串、FileMode、FileAccess、** FileShare **)
参数
path
类型:System.String
要打开的文件。
mode
类型:System.IO.FileMode
一个 FileMode 值,指定文件不存在时是否创建,并确定是保留还是覆盖现有文件的内容。
access
类型:System.IO.FileAccess
一个 FileAccess 值,它指定可以对文件执行的操作。
* 分享
* 类型:System.IO.FileShare *
FileShare 值指定其他线程对文件的访问类型。