如何使用Xamarin将嵌入式资源加载到Android位图中?

时间:2014-09-30 07:39:51

标签: android bitmap xamarin embedded-resource xamarin.forms

我正在开发一个Xamarin.Forms应用程序,它使用embedded images feature管理共享项目中的一些资产。现在我有平台特定的渲染器,它们也需要访问这些图像。

在iOS上我可以简单地使用

UIImage.FromResource(typeof(CustomMap).Assembly, "my_graphic");

加载嵌入的图像并在UIImageView或类似文件中使用它。如何在Android特定代码中完成相同的操作?

4 个答案:

答案 0 :(得分:1)

在droid渲染器中,您可以像这样将图像设置为Imageview。使用平台特定代码时,请使用平台文件结构中的图像。在Android中将您的图像包含在Drawable文件夹中。

        global::Android.Widget.ImageView imageview = new global::Android.Widget.ImageView ();
        imageview.SetBackgroundResource (Resource.Drawable.my_graphic);

答案 1 :(得分:0)

不完全清理和测试但您可能想要创建ImageLoaderSourceHandler类的实例并调用其LoadImageAsync方法,并向其传递ImageSource,context和CancellationToken(可选)的实例。 您将获得Android.Graphics.Bitmap的实例。

或者,如果您想绕过表单,您可能希望在Android项目中创建指向这些图像的链接并正常使用它们。或者加载byte stream from embedded resource

答案 2 :(得分:0)

我正是这样做的:

var key = "my_graphic";
using (var imageStream = Assembly.GetAssembly (typeof(YOURNAMESPACE.App)).GetManifestResourceStream (key))
                {
                   var bitmap = await BitmapFactory.DecodeStreamAsync (imageStream);
                }

我的嵌入式图像位于XamarinForms项目(PCL)

答案 3 :(得分:0)

这可能对您有用。

// If your class is inherited from activity or android context then use this.
var imageSource = ImageSource.FromFile("Images/waterfront.jpg");
var img = new ImageLoaderSourceHandler().LoadImageAsync(imageSource,this);

// if your class is not from android context then use this.
var imageSource = ImageSource.FromFile("Images/waterfront.jpg");
var img = new ImageLoaderSourceHandler().LoadImageAsync(imageSource,Android.App.Application.Context);

这是完整的实现

private async Bitmap GetBitMap(path)
{
   var imageSource = ImageSource.FromFile(path);
   return await new ImageLoaderSourceHandler().LoadImageAsync(imageSource,Android.App.Application.Context);
}