【问题标题】:Would it be wise to create a common class for images?为图像创建一个通用类是否明智?
【发布时间】:2013-02-12 15:27:41
【问题描述】:

我对 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
}

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

【问题讨论】:

    标签: bitmap xamarin.ios uiimage xamarin.android android-drawable


    【解决方案1】:

    是的,这是有道理的。

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

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

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

    【讨论】:

    • 有趣的库,这个 CrossGraphics。它可能拥有我需要的一切以及更多。会调查的:)
    • 请注意,IMO CrossGraphics 也会从界面中受益 :) 但正如我妈妈所说,你不能一直取悦所有人......你也不能取悦某些人任何时候... ;)
    猜你喜欢
    • 2012-06-09
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多