2

我对 Android 的 MonoTouch / Mono 有点陌生。我在 iOS 和 Android 应用程序的平台上工作,并且正在将我们的本机代码移植到 C#。

我们的应用程序显示图像。然而,在 Mono 中没有通用的图像类型。在 Android 的 Mono 中,一个选项正在使用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
}

现在我想知道,使用此设置可能会遇到任何问题吗?我想知道这样的设置是否会出现任何性能、缓存或其他问题。

4

1 回答 1

2

是的,这是有道理的。

虽然我个人更喜欢使用接口而不是使用#if 的方法——我发现接口在重构、测试等方面效果更好——并且当您移植到新平台(mac、winrt、wp 等)时,该方法可以更好地扩展

只要您仔细设计您的界面,那么您就不应该遇到任何特定的性能问题 - 但是如果您发现您的代码开始在像素阵列级别上工作,那么您可能会错过原生优化机会。

有关类似领域的一些想法 - 绘图 - 请参阅 Frank 在https://github.com/praeclarum/CrossGraphics上的工作

于 2013-02-12T07:27:41.707 回答