我对 Android 版 MonoTouch/Mono 有点陌生。我在 iOS 和 Android 应用程序平台上工作,并且正在将我们的 native 代码移植到 C#。
我们的应用程序显示图像。然而,在 Mono 中没有通用的图像类型。在 Android 的 Mono 中,一个选项是使用 Bitmap
(不能子类化)或 BitmapDrawable
,在 iOS 中,有 UIImage
。
为了使应用程序中的某些代码在跨平台上更加一致,在我看来,创建一个用于处理图像的通用类是个好主意。该类基本上是相应“ native ”类的外观。我希望此类具有的功能之一是从字节数组创建图像对象。目前我的代码如下所示(并且工作正常):
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
}
现在我想知道,使用此设置可能会遇到任何问题吗?我想知道这样的设置是否会带来性能、缓存或其他问题。
最佳答案
是的,这是有道理的。
虽然我个人更喜欢使用接口(interface)而不是使用 #if 的方法 - 我发现接口(interface)在重构、测试等方面效果更好 - 并且当您移植到新平台(mac、winrt、wp、等)
只要您仔细设计界面,就不应该遇到任何特定的性能问题 - 但如果您发现代码开始在像素数组级别工作,那么您可能会错过 native 优化机会。
有关类似领域绘图的一些想法 - 请参阅 Frank 的工作 https://github.com/praeclarum/CrossGraphics
关于bitmap - 为图像创建一个公共(public)类是否明智?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14826772/