Xamarin 如何使用图形加载/绘制图像?

Xamarin 如何使用图形加载/绘制图像?,xamarin,xamarin.forms,xamarin.android,ngraphics,ncontrol,Xamarin,Xamarin.forms,Xamarin.android,Ngraphics,Ncontrol,在我的Xamarin表单应用程序中,我在androidProject/Resources/drawable/myImage.png下有一个图像。要从Xamarin加载这些,只需执行以下操作 Image myImage = new Image() { Source = ImageSource.FromFile("myImage.png") }; 但是,没有办法使用图形绘制图像。相反,NGraphicsDrawImage(IImage)需要IImage。就我所知,没有办法把一个Xamarin.Fo

在我的Xamarin表单应用程序中,我在
androidProject/Resources/drawable/myImage.png
下有一个图像。要从Xamarin加载这些,只需执行以下操作

Image myImage = new Image() { Source = ImageSource.FromFile("myImage.png") };
但是,没有办法使用图形绘制
图像。相反,NGraphics
DrawImage(IImage)
需要
IImage
。就我所知,没有办法把一个
Xamarin.Forms.Image
变成一个
NGraphics.IImage
。事实上,我能找到的加载
IImage
的唯一方法是

IImage myImage = Platform.LoadImage("myImage.png");
但是,这不起作用,因为在引擎盖下它使用了
BitmapFactory.decodeFile()
,这需要绝对文件路径。我找不到任何方法来获取资源的绝对文件路径(如果它存在的话?)


因此,如何使用NGraphics加载和显示图像?

NGraphics不提供任何帮助来从平台资源文件加载图像

你可以做如下的事情。但是,在位图->流->位图之间来回转换会增加一些开销

安卓:

Stream GetDrawableStream(上下文,int-resourceId)
{
var drawable=ResourcesCompat.GetDrawable(context.Resources,resourceId,context.Theme);
if(可绘制为位图可绘制位图可绘制)
{
var stream=newmemoryStream();
var bitmap=bitmapDrawable.bitmap;
Compress(bitmap.CompressFormat.Png,80,流);
bitmap.Recycle();
回流;
}
返回null;
}
iOS:

Stream GetImageStream(字符串文件名)
{
使用(var image=UIImage.FromFile(文件名))
使用(var imageData=image.AsPNG())
{
var byteArray=新字节[imageData.Length];
System.Runtime.InteropServices.Marshal.Copy(imageData.Bytes,byteArray,0,Convert.ToInt32(imageData.Length));
var流=新的内存流(byteArray);
回流;
}
返回null;
}
但是,您可以在Android上直接从
位图
转到
位图
,例如:

BitmapImage GetBitmapFromDrawable(上下文,int resourceId)
{
var drawable=ResourcesCompat.GetDrawable(context.Resources,resourceId,context.Theme);
if(可绘制为位图可绘制位图可绘制)
{
var bitmap=bitmapDrawable.bitmap;
返回新的位图图像(位图);
}
返回null;
}
在iOS上:

CGImageImage GetImageStream(字符串文件名)
{
var iOSimage=UIImage.FromFile(文件名);
var cgImage=新的CGImageImage(iOSImage.cgImage,iOSImage.Scale);
返回cgImage;
}
BitmapImage
CGImageImage
在图形中实现
IImage