使用Windows Mobile 5.0设备绘制医疗波形

目录

介绍

定义

适用范围


介绍

前段时间,我开发了一个用于医疗监控的原型实时监控控制台。这个技巧解释了我的工作。

定义

  • ECG意为心电图​​,表示心脏组织电活动的图表。
  • SPO2表示氧合血红蛋白饱和度,或简称为血液中氧气的百分比。对于一个正常休息的成年人来说,这可能是9599左右。
  • 呼吸意味着一次吸气和一次呼气。对于一个正常休息的成年人来说,这可能是每分钟1620次。

适用范围

生物医学监测器用于重症监护应用,在这些应用中,患者的重要器官功能会受到持续监测。如果这样的监控器将数据流式传输到Windows Mobile手机等手持设备,我们就可以实现随时随地的监控设备。这可以帮助医学专家在不离开座位的情况下立即监测任何患者。

当前的演示从静态整数数组中获取值。但是,我很快会将其移至蓝牙以绘制真正的实时数据。我自己在运行Windows Mobile 5.0i-mate K-JAM设备上测试了代码。但是,此代码应在任何PPC 2003兼容设备上运行。

该应用程序的工作非常简单,如下所述:

public partial class Form1 : Form
{   
    //create variables for storing current and previous points
    int x, p, q, r, y, px, pp, pq, pr, py = 0; 

    //create colored pens for drawing 
 
    Pen yelgpen = new Pen(Color.YellowGreen);
    Pen redpen = new Pen(Color.Red);
    Pen graypen = new Pen(Color.Gray);
    Pen blackpen = new Pen(Color.Black); 

    //fill the points to be plotted in integer arrays 
 
     int[] ECGArray = new int[] 

    { -5, -14, -10, -8, -9, -7, 0, 121, 108, -24, -34, -18, -19, -16, -19, -17, 
    -11, -11, -10, -1, 13, 33, 45, 47, 46, 37, 12, -12, -24, -23, -25, -21, -20, 
    -17, -19, -14, -12, -13, -12, -13, -8, -9, -5, -8, 10, 21, 19, 4, -10, 
    -11, -11, -12, -8, -12, 0, 121, 108, -24, -23, -18, -21, -16, -15, -14,  
    -10, -12, -7, 5, 26, 43, 46, 46, 41, 21, -1, -18, -24, -19, -22, -21,  
    -18, -18, -16, -13, -10, -12, -11, -8, -10, -8, -7, 0, 18, 24, 9, -7,  
    -13, -11, -9, -8, -10, 0, 121, 108, -24, -33, -17, -20, -19, -17, -14, 
    -13, -11, -8, 2, 19, 35, 47, 50, 43, 29, 7, -15, -29, -22, -25, -20,  
    -16, -19, -17, -16, -12, -11, -11, -10, -11, -9, -6, 0, 13, 23, 15, -2,  
    -11, -10, -10, -8, -7, -15, 0, 121, 108, -24, -20, -19, -20, -16, -12,  
    -14, -15, -11, -2, 12, 30, 41, 48, 44, 34, 16, -5, -21, -22, -21, -20,  
    -20, -13, -15, -15, -17, -14, -13, -9, -10, -10, -11, -8, 5, 23, 22, 4,  
    -9, -10, -12, -10, -10, -11, 0, 121, 108, -24, -28, -18, -19, -16, -16,  
    -16, -15, -13, -8, 4, 21, 39, 44, 46, 38, 45, 24, -1, -23, -28, -27, -25,  
    -20, -21, -18, -18, -14, -14};

     int[] SPO2Array = new int[]  
    { 10, 9, 9, 9, 9, 9, 9, 10, 12, 16, 20, 25, 31, 37, 41, 45, 47, 47,  
    46, 42, 38, 33, 27, 23, 20, 17, 15, 15, 16, 16, 18, 18, 19, 19, 18, 18, 17,  
    16, 15, 13, 13, 11, 11, 11, 10, 10, 9, 9, 9, 9, 9, 9, 10, 12, 16, 20, 25,  
    31, 37, 41, 45, 47, 47, 46, 42, 38, 33, 27, 23, 20, 17, 15, 15, 16, 16, 18,  
    18, 19, 19, 18, 18, 17, 16, 15, 13, 13, 11, 11, 11, 10, 10, 9, 9, 9, 9, 9,  
    9, 10, 12, 16, 20, 25, 31, 37, 41, 45, 47, 47, 46, 42, 38, 33, 27, 23, 20,  
    17, 15, 15, 16, 16, 18, 18, 19, 19, 18, 18, 17, 16, 15, 13, 13, 11, 11, 11,  
    10, 10, 9, 9, 9, 9, 9, 9, 10, 12, 16, 20, 25, 31, 37, 41, 45, 47, 47, 46,  
    42, 38, 33, 27, 23, 20, 17, 15, 15, 16, 16, 18, 18, 19, 19, 18, 18, 17, 16,  
    15, 13, 13, 11, 11, 11, 10, 10, 9, 9, 9, 9, 9, 9, 10, 12, 16, 20, 25, 31,  
    37, 41, 45, 47, 47, 46, 42, 38, 33, 27, 23, 20, 17, 15, 15, 16, 16, 18, 18,  
    19, 19, 18, 18, 17, 16, 15, 13, 13, 11, 11, 11, 10, 10, 10, 10 };

     int[] respArray = new int[] { 50, 50, 50, 51, 51, 51, 51, 52, 52, 52, 52,  
    53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56,  
    56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58,  
    58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 57,  
    57, 57, 57, 57, 57, 57, 56, 56, 56, 56, 56, 56, 55, 55, 55, 55, 55,  
    54, 54, 54, 54, 54, 53, 53, 53, 52, 52, 51, 51, 51, 50, 50, 50, 49,  
    49, 49, 48, 48, 47, 47, 47, 46, 46, 46, 45, 45, 45, 45, 44, 44, 44,  
    43, 43, 42, 42, 41, 41, 41, 40, 40, 39, 39, 38, 38, 38, 37, 37, 37,  
    36, 36, 36, 36, 35, 35, 35, 35, 34, 34, 34, 34, 34, 33, 33, 33, 33,  
    33, 32, 32, 32, 32, 32, 32, 32, 32, 31, 31, 31, 31, 31, 31, 31, 31,  
    31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 34,  
    34, 34, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 39, 39, 40, 40,  
    40, 41, 41, 42, 42, 42, 43, 43, 44, 44, 45, 45, 45, 45, 46, 46, 46,  
    46, 47, 47, 47, 47, 48, 48, 49, 49, 49, 49, 49, 49 };

现在,使用计时器让图形移动:

private void timer1_Tick(object sender, EventArgs e)
{     
 //we are drawing on the form itself
 Graphics g = this.CreateGraphics();

            //traverse through the points one by one to get moving graphs
            for (int i = 0; i < ECGArray.Length; i++)
            {
                //e.Graphics.DrawLine(pen, 10, 10, 100, 100);
                if (x > this.Width - 10)
                {
                    x = 0;
                    pp = 0;
                    pq = 0;
                    pr = 0;
                    px = 0;
                }
                x += 1;

                //draw ECG
                p = 70 - (ECGArray[i] / 6 + 50);
                g.DrawLine(yelgpen, px, pp, x, p);
                g.DrawLine(yelgpen, px, pp + 60, x, p + 60);
                g.DrawLine(yelgpen, px, pp + 120, x, p + 120);
                //draw SPO2
                q = ((SPO2Array[i] * -1) / 2 + 200);
                g.DrawLine(graypen, px, pq, x, q);
                //draw respiration
                r = (respArray[i] / 2 + 220);
                g.DrawLine(redpen, px, pr, x, r);
                //draw erasebar to erase previous content at current location
                g.DrawRectangle(blackpen, 0, 0, x + 1, this.Height);
                
                //store current point as previous point
                pp = p;
                pq = q;
                pr = r;
                px = x;            
            }
    }

不要忘记启用计时器。我已将定时器间隔设置为1ms以获得良好的扫描速度。

https://www.codeproject.com/Tips/14327/Drawing-Medical-Waveforms-using-a-Windows-Mobile-D

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值