我有一个xamarin表单解决方案,其中包含PCL,Android和iOS项目。我在PCL项目中有几个图像,我将其链接到Android和iOS(可绘制/资源文件夹)项目中。因此,如果我想在 pcl 项目中的图像控件中显示此图像,我可以使用并且工作正常。
但是,我需要将此图像的内容加载到 Stream 或 byte[](当然,从/到转换是微不足道的)以提前调用服务。
我怎样才能完成这项任务?如果在 pcl 项目中有一种方法更好,但如果需要特定平台的代码,没问题。
注意:如果我们在 pcl 项目中将图像作为资源嵌入,则此任务将很容易,但我不希望这样做,我不想增加嵌入重复图像的应用程序大小。
注意:还有其他"类似"的问题,但请从嵌入式资源加载内容,这里的情况并非如此。
您需要使用依赖项并需要特定平台中的代码才能从图像中获取 base64 字符串,并且它在本地自动获取路径
在 PCL 项目中
public interface IGetBase64
{
string GenerateBase64(string FileName);
}
在 iOS 渲染中
public string GenerateBase64(string FileName)
{
byte[] b = System.IO.File.ReadAllBytes(FileName);
string s = Convert.ToBase64String(b);
return s;
}
在安卓中
public string GenerateBase64(string FileName)
{
byte[] b = System.IO.File.ReadAllBytes(FileName);
string s = Convert.ToBase64String(b);
return s;
}
您可以在Android平台的Asset
文件夹中和iOS平台的Resources
文件夹中添加图像。
然后获取图像在平台中的路径:
在 Android 中,只需将前缀file:///android_asset/
添加到映像名称中即可。
在 iOS 中,使用代码获取路径:
NSString *path = [[NSBundle mainBundle] pathForResource:@"IMAGE_FILE_NAME" ofType:@"IMAGE_TYPE"];
然后通过依赖项服务将路径值返回到 PCL。