我对MonoTouch / Mono for Android有点新鲜。我在iOS和Android应用程序的平台上工作,我正在将我们的本机代码移植到C#。
我们的应用会显示图片。但是在Mono中没有常见的图像类型。在Mono for Android中,一个选项是使用Bitmap
(不能是子类)或BitmapDrawable
,在iOS中有UIImage
。
为了使应用程序中的某些代码在不同平台上更加一致,我觉得创建一个处理图像的公共类似乎是一个好主意。该类基本上是相应“本机”类的外观。我希望这个类具有的功能之一是从字节数组创建一个图像对象。目前我的代码如下所示(并且工作正常):
using System;
#if ANDROID
using Android.Graphics;
using Android.Graphics.Drawables;
#else
using MonoTouch.UIKit;
using MonoTouch.Foundation;
#endif
namespace OurCompany.Core
{
#if ANDROID
public class Image : BitmapDrawable
{
public Image (byte[] bytes) : base(BitmapFactory.DecodeByteArray (bytes, 0, bytes.Length))
{
}
}
#else
public class Image : UIImage
{
public Image (byte[] bytes) : base(NSData.FromArray(bytes), 1)
{
}
}
#endif
}
现在我想知道,使用此设置可能遇到任何问题吗?我想知道我是否可以期待任何性能,缓存或其他类似设置的问题。
答案 0 :(得分:2)
是的,这是有道理的。
虽然我个人更喜欢使用界面而不是使用#if的方法 - 我发现界面在重构,测试等方面效果更好 - 而且当你移植到新平台时,这种方法可以更好地扩展(mac,winrt,wp,等)
只要您仔细设计界面,就不应该遇到任何特定的性能问题 - 但是如果您发现代码开始在像素阵列级别工作,那么您可能会错过原生优化机会。 / p>
对于类似领域的一些想法 - 绘制 - 请参阅Frank在https://github.com/praeclarum/CrossGraphics
上的工作