Xamarin 如何使用图形加载/绘制图像?
在我的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
androidProject/Resources/drawable/myImage.png
下有一个图像。要从Xamarin加载这些,只需执行以下操作
Image myImage = new Image() { Source = ImageSource.FromFile("myImage.png") };
但是,没有办法使用图形绘制图像。相反,NGraphicsDrawImage(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