在不锁定图像文件的情况下查看图像文件.(是否复制到内存?)
本文关键字:图像 文件 复制 是否 内存 锁定 情况下 | 更新日期: 2023-09-27 18:22:07
我希望能够在不锁定文件的情况下打开/查看图像(.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**)
参数
路径
类型:System.String
要打开的文件。
模式
类型:System.IO.FileMode
FileMode值,用于指定在不存在文件的情况下是否创建文件,并确定是保留还是覆盖现有文件的内容。
访问
类型:System.IO.FileAccess
FileAccess值,用于指定可以对文件执行的操作。
*共享
*类型:System.IO.FileShare*
指定其他线程对文件的访问类型的FileShare值。