我希望能够在不锁定文件的情况下打开/查看图像(.jpg)。基本上我有一个程序,让用户选择一个将覆盖图片的图片。但问题是我显示的是被覆盖的图像。那么如何在不锁定图像的情况下加载图像呢?
这是我现在必须设置图像的代码
Image1.Source = new BitmapImage( new Uri( myFilePath ) ) );
myFilePath等于类似“C:\ Users * \ My Pictures \ Sample.jpg”的字符串
答案 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值,指定其他线程对文件的访问类型。