IOS Xamarin - 实时绘图画线

标签 ios plot xamarin.ios xamarin draw

我正在从事一个实时显示心电图的交叉测试项目。它在使用 Xamarin 的 Windows 和 Android 上运行良好,但在 IOS 中我的性能越来越慢。

我认为问题是由于我在 ios 方面缺乏专业知识..

我做过两次测试都失败了,有人有加速的解决方案吗?

测试一个

我调用 Plot,然后每隔 < 10 毫秒将 UIImage wBitmap 分配为 MyView Backgroud

    public void Plot(PointF pPrec, PointF pNext)
    {
    SizeF bitmapSize = new SizeF(wBitmap.Size);
    using (CGBitmapContext context2 = new CGBitmapContext(IntPtr.Zero, (int)bitmapSize.Width, (int)bitmapSize.Height, 8, (int)(4 * bitmapSize.Width), CGColorSpace.CreateDeviceRGB(), CGImageAlphaInfo.PremultipliedFirst))
    {
        context2.DrawImage(new RectangleF(0, 0, wBitmap.Size.Width, wBitmap.Size.Height), wBitmap.CGImage);
        context2.SetLineWidth(1);
        context2.AddLineToPoint(pNext.X, pNext.Y);
        context2.DrawPath(CGPathDrawingMode.Stroke);
        // output the drawing to the view
        wBitmap = UIImage.FromImage(context2.ToImage());
    }
}

测试 B

我调用 Plot,然后每隔 < 10 毫秒将 UIImage wBitmap 分配为 MyView Backgroud

    public void Plot2(PointF pPrec, PointF pNext) { UIGraphics.BeginImageContext(wBitmap.Size); context = UIGraphics.GetCurrentContext();
    using (context)
    {
        if (wBitmap != null)
        {
            context.TranslateCTM(0f, wBitmap.Size.Height);
            context.ScaleCTM(1.0f, -1.0f);
            context.DrawImage(new RectangleF(0f, 0f, wBitmap.Size.Width, wBitmap.Size.Height), wBitmap.CGImage);
            context.ScaleCTM(1.0f, -1.0f);
            context.TranslateCTM(0f, -wBitmap.Size.Height);
        } 

        context.SetLineWidth(1);
        context.MoveTo(pPrec.X, pPrec.Y);
        context.AddLineToPoint(pNext.X, pNext.Y);
        context.DrawPath(CGPathDrawingMode.Stroke);

wBitmap = UIGraphics.GetImageFromCurrentImageContext();


    }//end using cont
    UIGraphics.EndImageContext();
}

最佳答案

您不需要先绘制到位图中,然后再在 View 中使用该位图。正确的做法是子类化 UIView,然后覆盖 Draw() 方法并在其中绘制您的东西。

然后您可以在 View 上调用 SetNeedsDisplay() 来安排重绘。

下面的例子画了一个箭头形状的背景:

class YourView: UIView
{
public override void Draw(RectangleF rect)
{
    const float inset = 15f;
    UIColor.Blue.SetFill();
    var path = new UIBezierPath();
    path.MoveTo(new PointF(0, 0));
    path.AddLineTo(new PointF(rect.Width - inset, 0));
    path.AddLineTo(new PointF(rect.Width, rect.Height * 0.5f));
    path.AddLineTo(new PointF(rect.Width - inset, rect.Bottom));
    path.AddLineTo(new PointF(0, rect.Bottom));
    path.AddLineTo(new PointF(0, 0));
    path.Fill();
}
}
}

或者,您可能想查看现有组件,例如 CorePlotTeeChart在 Xamarin 组件商店中可用。 TeeChart 甚至可以跨平台,因此您不必担心 Android 还是 iOS。

关于IOS Xamarin - 实时绘图画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21830197/

相关文章:

Python 保存空图

r - 我们如何制作xkcd风格的图表?

ios - 使用 SWRevealViewController 和 Swift 以编程方式加载 Controller

ios - 我的工具栏不会显示在 webView 上方

ios - 两个不冲突的约束创建 NSLayoutConstraint 错误

ios - Xamarin Test Cloud 是否支持 iOS 设备上的 React Native 应用程序?

xamarin.forms - 如何在 Xamarin.Forms 中检查暗模式

ios - 使用 unitFlags 创建自定义方法

重现塔夫特莫尔振动

ios - MonoTouch,UITableViewController,如何在一个部分中插入一行?