问题描述
我正在编写一个 Xamarin 图片库应用程序,我的 UWP 应用程序具有广泛的文件权限,可以从随机文件路径加载字节,但我无法显示这些字节
image.source = ImageSource.FromStream(() => new MemoryStream(imageBytes));
此代码在基础项目中,其中字节是通过 UWP 项目中的依赖服务从图像文件中加载的。 .xaml 文件包含以下图像定义:
<Image x:Name="image" Aspect="Fill"/>
执行此代码后(imageBytes 不为空),界面上不显示图像。
但是如果我使用
image.source = ImageSource.Fromresource("test.png");
显示来自资源的图像。所以我假设如果正确加载图像应该是可见的。 我没有在 Android 或 iPhone 上测试代码,因为我主要想在 Windows 上使用它,也许以后在 Android 上使用它。 可以请任何人告诉我我做错了什么或张贴一个工作示例代码的链接!
亲切的问候, 沃尔夫冈
解决方法
我正在编写一个 Xamarin 图片库应用程序,我的 UWP 应用程序具有广泛的文件权限,可以从随机文件路径加载字节,但我无法显示这些字节
导致此问题的原因有很多,如果您像下面这样从 installedLocation 文件夹加载文件,您需要确保文件 Build Action 是 Content
类型。
在测试过程中,它可以正确加载图像字节并很好地显示图像。请尝试以下 DependencyService。
界面
public interface IImageStream
{
Task<byte[]> GetBytes();
}
实施
[assembly: Dependency(typeof(MyImageStream))]
public class MyImageStream :IImageStream
{
public async Task<byte []> GetBytes()
{
Windows.Storage.StorageFolder installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
StorageFile sampleFile = await installedLocation.GetFileAsync("test.png");
byte[] result;
using (Stream stream = await sampleFile.OpenStreamForReadAsync())
{
using (var memoryStream = new MemoryStream())
{
stream.CopyTo(memoryStream);
result = memoryStream.ToArray();
}
}
return result;
}
}
使用
var imageBytes = await DependencyService.Get<IImageStream>().GetBytes();
image.Source = ImageSource.FromStream(() => new MemoryStream(imageBytes));