如何在 pcl 上加载 xamarin 共享映像的内容(流或字节 [])



我有一个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。

最新更新