xamarin UWP图片读取

    xamarin使用listview时经常会使用图片,而图片的图片源设置在uwp平台中是有平台特性的,这点请注意区分处理。也就是说在android和IOS上正常的处理在uwp下却是错误的方式。

    如同一张图片在不同的内容页同时出现的情况,即存在导航页面的时候,通常我们会用一个listview来显示人员列表,人员列表包含每个人的头像图片,如果我们点击listview同时使用Navigation.PushAsync()方法进入人员信息详细页面的时候,如果在详细页面你同时也有这张头像图片的情况。如果你只是简单的如下设置一个图片路径,那将会报The process cannot access the file “Image\test.png” because it is being used by another proce

   Image Img=new() Image();    

   Img.Source= ImageSource.FromFile("Image\test.png");

   由于uwp的平台特性,当我是设置图片的路径的时候,这个图片会被这个进程占用,同时阻止其他进程使用,当我们在另一个页面也同样使用这种图片时,有用上一个导航页面没有释放到这张图片,导致我们在新页面不能使用这种图片。这造成我们不能对资源操作。

  下面提供一种解决方案,在我们读取资源图片的时候,尽量不要使用进程独占并且不会主动释放的方式,我们可以使用FileStream方式读取资源。然后释放掉,方法如下

public byte[] PhotoStream(string path)
{
byte[] byData;
using (FileStream fs = new FileStream(path, FileMode.Open))
{
byData = new byte[fs.Length];
fs.Read(byData, 0, byData.Length);
fs.Dispose();
}
return byData;
}

 

在uwp平台下使用下列方式调用上面的方法即可。

Image Img=new() Image(); 

if (Device.OS == TargetPlatform.Windows)
{
byte[] bytes = Dependencies.FileUtil.PhotoStream(value.ToString());
stream = new System.IO.MemoryStream(bytes);
Img.Source= ImageSource.FromStream(GetStream);
}

posted @ 2016-09-09 11:44  醉梦ai天涯  阅读(645)  评论(0编辑  收藏  举报