簡體   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