繁体   English   中英

Xamarin本机应用程序+ PCL:在PCL项目中共享图像

[英]Xamarin native apps + PCL: Share images in PCL project

我正在使用Xamarin开发适用于多个平台的应用程序。 共享代码托管在单独的PCL项目中。 该项目包含大量图像,我也想通过PCL项目共享这些图像。

那可能吗? 如何从特定于平台的项目中访问图像数据?

您应该将图像放在每个单独的项目中,因为每个平台具有不同的图像分辨率约定,并且为了优化和正确显示图像,您需要使用操作系统特定的约定将图像保存在不同的项目中。

您可以像这样在PCL项目中引用图像文件:

beachImage.Source = "waterfront.png"; 在每个OS项目中按照以下约定定义了滨水区:

Android图片应放置在Resources \\ Drawable \\ {specificResolution}中

Android具有以下解决方案(来自Android开发者网站 ):

 ldpi (low) ~120dpi mdpi (medium) ~160dpi hdpi (high) ~240dpi xhdpi (extra-high) ~320dpi xxhdpi (extra-extra-high) ~480dpi xxxhdpi (extra-extra-extra-high) ~640dpi 

请注意,每种分辨率都有自己的图像文件夹。

在iOS中,您具有以下解决方案(摘自iOS Human Interface Guidelines ): iOS解析度

您应该通过在“资源”文件夹中添加“ @ 2x”或“ @ 3x”来分离图像。

PCL支持的ResourceManager类仅支持一组有限的数据类型,而Image不是其中之一。

根据此处的MSDN文章 ,处理图像数据类型的最佳方法是将图像编码为Base64编码的字符串资源,然后将数据解码为ByteArray ,然后将该字节数组加载到Image中。

您将不得不预处理图像以生成Base64字符串,因为在运行时无法完成。

我终于做了什么(到现在为止,我只能在iOS和Droid项目上进行验证,Windows Phone仍在开发中):

我将共享项目中的图像数据作为Stream ,如下所示:

public Stream GetImageStream () {
    return assembly.GetManifestResourceStream (nameOfResource);
}

图像的属性设置为EmbeddedResource 在我的iOS项目中,我可以像这样访问我的图像:

using (var stream = myClass.GetImageStream ()) {
    var image = new UIImage (NSData.FromStream (stream));
    // do stuff with image
}

在Android上,我使用以下代码:

using (var stream = myClass.GetImageStream ()) {
    var bitmap = BitmapFactory.DecodeStream (stream);
    // do stuff with bitmap
}

欢迎反馈是否有这种做法的陷阱! (除了我现在可以使用的明显的大小调整问题之外,我还可以想象这种方法绕过了任何特定于平台的缓存机制吗?)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM