IOS Xamarin - Garis gambar plot waktu nyata

Saya sedang mengerjakan proyek uji silang untuk menampilkan grafik ekg secara realtime. ini berfungsi dengan baik di windows dan Android menggunakan Xamarin, TETAPI di iOS saya memiliki kinerja yang lambat dan lambat.

Saya pikir masalahnya adalah karena kurangnya keahlian saya di ios..

Saya telah melakukan dua tes, keduanya gagal, ada yang punya solusi untuk mempercepatnya?

UJI A

Saya memanggil Plot dan kemudian menetapkan UIImage wBitmap sebagai MyView Backgroud setiap ‹ 10 md

    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());
    }
}

UJI B

Saya memanggil Plot dan kemudian menetapkan UIImage wBitmap sebagai MyView Backgroud setiap ‹ 10 md

    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();
}

person Andrea Falappi - Polipo    schedule 17.02.2014    source sumber
comment
Mengapa Anda harus menelepon ini setiap 10 ms? Sepertinya berlebihan.   -  person bbarnhart    schedule 17.02.2014
comment
Ya, program EKG secara realtime mengirim sampel setiap 2 md (koord x,y) saya dapat membuang 5 sampel untuk penipisan, proses pengundian membuat titik baru setiap 10 md. Pada Galaxy tab 3 Android dan Windows Samsung ATIV bekerja dengan sempurna.   -  person Andrea Falappi - Polipo    schedule 17.02.2014


Jawaban (1)


Anda tidak perlu menggambar bitmap terlebih dahulu lalu menggunakan bitmap tersebut dalam tampilan. Pendekatan yang benar untuk ini adalah dengan membuat subkelas UIView dan kemudian mengganti metode Draw() dan mengecat barang-barang Anda di sana.

Anda kemudian dapat memanggil SetNeedsDisplay() pada tampilan untuk menjadwalkan penggambaran ulang.

Contoh di bawah ini menggambar latar belakang berbentuk panah:

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();
}
}
}

Alternatifnya, Anda mungkin ingin melihat komponen yang sudah ada, seperti CorePlot atau TeeChart tersedia di toko Komponen Xamarin. TeeChart bahkan bersifat lintas platform, jadi Anda tidak perlu khawatir tentang Android vs. iOS.

person Krumelur    schedule 17.02.2014