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

5
我正在开发一个Xamarin.Forms应用程序,通过使用嵌入式图像功能来管理共享项目中的一些资产。现在我有平台特定的渲染器,它们也需要访问这些图像。
在iOS上,我可以简单地使用
UIImage.FromResource(typeof(CustomMap).Assembly, "my_graphic");

如何在 Android 特定代码中加载嵌入式图像并在 ImageView 或类似控件中使用它?
4个回答

2
这是我正在进行的方式:

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

我的嵌入式图像在XamarinForms项目(PCL)中。


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);
}

0

虽然不完全干净和测试,但您可能想创建一个ImageLoaderSourceHandler类的实例,并调用其LoadImageAsync方法,将ImageSource实例、上下文和CancellationToken实例传递给它(可选)。 最终您将得到一个Android.Graphics.Bitmap实例。

或者,如果您想绕过Forms,您可以在Android项目中创建指向这些图像的链接,并正常使用它们。或者从嵌入资源中加载字节流


使用ImageLoaderSourceHandler与加载其他图像的操作有所干扰...但是https://github.com/xamarin/mobile-samples/blob/master/EmbeddedResources/SharedLib/ResourceLoader.cs解决了问题:var stream = EmbeddedResourceLoader.GetEmbeddedResourceStream("my_graphic"); var bitmap = await BitmapFactory.DecodeStreamAsync(stream); - Rodja

0
在droid渲染器中,您可以像这样将图像设置为ImageView。在使用特定于平台的代码时,请使用平台文件结构中的图像。在Android中,将您的图像包含在Drawable文件夹中。
        global::Android.Widget.ImageView imageview = new global::Android.Widget.ImageView ();
        imageview.SetBackgroundResource (Resource.Drawable.my_graphic);

1
我询问的是关于在Android上使用嵌入式资源,而不是Android资源机制。 - Rodja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接