添加项目文件。

This commit is contained in:
lxd 2024-12-25 17:24:22 +08:00
parent 2f330b4273
commit f419a45561
31 changed files with 7373 additions and 0 deletions

View File

@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.9.34723.18
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "心电图绘制", "1200Gxml心电图绘制\心电图绘制.csproj", "{3EBA2F41-DB73-407D-95D6-06293096F945}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{3EBA2F41-DB73-407D-95D6-06293096F945}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3EBA2F41-DB73-407D-95D6-06293096F945}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3EBA2F41-DB73-407D-95D6-06293096F945}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3EBA2F41-DB73-407D-95D6-06293096F945}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="ftppath" value="ftp://47.94.80.150:21/"/>
<add key="username" value="ecg"/>
<add key="password" value="ecg"/>
<add key="path1" value=""/>
<add key="ecgHttpUrl" value=""/>
<!--服务启用的ip地址-->
<add key="ip" value="0.0.0.0"/>
<!--服务启用端口-->
<add key="port" value="4050"/>
<!--是否屏幕输出信息-->
<add key="log" value="1"/>
<!--保存心电报告路径-->
<add key="path" value=""/>
</appSettings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,9 @@
namespace _1200Gxml心电图绘制
{
public class CommonVerifyUrlResult
{
public string access_token { get; set; }
public string token_type { get; set; }
public string expires_in { get; set; }
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,97 @@
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Web.Security;
namespace _1200Gxml心电图绘制
{
public class DesEncrypt
{
#region ================
/// <summary>
/// 加密
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public static string Encrypt(string text)
{
return Encrypt(text, "da1ff5@1b453d1f66d83bc6e7c5cab4$");
}
/// <summary>
/// 加密数据
/// </summary>
/// <param name="text"></param>
/// <param name="sKey"></param>
/// <returns></returns>
public static string Encrypt(string text, string sKey)
{
var des = new DESCryptoServiceProvider();
var inputByteArray = Encoding.Default.GetBytes(text);
var hashPasswordForStoringInConfigFile =
FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5");
if (hashPasswordForStoringInConfigFile != null)
des.Key = Encoding.ASCII.GetBytes(hashPasswordForStoringInConfigFile.Substring(0, 8));
var passwordForStoringInConfigFile = FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5");
if (passwordForStoringInConfigFile != null)
des.IV = Encoding.ASCII.GetBytes(passwordForStoringInConfigFile.Substring(0, 8));
var ms = new MemoryStream();
var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
var ret = new StringBuilder();
foreach (var b in ms.ToArray()) ret.AppendFormat("{0:X2}", b);
return ret.ToString();
}
#endregion
#region ================
/// <summary>
/// 解密
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public static string Decrypt(string text)
{
return Decrypt(text, "da1ff5@1b453d1f66d83bc6e7c5cab4$");
}
/// <summary>
/// 解密数据
/// </summary>
/// <param name="text"></param>
/// <param name="sKey"></param>
/// <returns></returns>
public static string Decrypt(string text, string sKey)
{
var des = new DESCryptoServiceProvider();
var len = text.Length / 2;
var inputByteArray = new byte[len];
int x, i;
for (x = 0; x < len; x++)
{
i = Convert.ToInt32(text.Substring(x * 2, 2), 16);
inputByteArray[x] = (byte)i;
}
var hashPasswordForStoringInConfigFile =
FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5");
if (hashPasswordForStoringInConfigFile != null)
des.Key = Encoding.ASCII.GetBytes(hashPasswordForStoringInConfigFile.Substring(0, 8));
var passwordForStoringInConfigFile = FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5");
if (passwordForStoringInConfigFile != null)
des.IV = Encoding.ASCII.GetBytes(passwordForStoringInConfigFile.Substring(0, 8));
var ms = new MemoryStream();
var cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
return Encoding.Default.GetString(ms.ToArray());
}
#endregion
}
}

View File

@ -0,0 +1,901 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.IO;
namespace _1200Gxml心电图绘制
{
public class EcgDataDraw_New
{
int Amplitude = 10;//振幅
int PaperSpeed = 25;
double AmplificationFactor = 140.00;
//int AmplificationFactor = 60;
int SamplingRate = 300;
int LeadCount = 12;
int byteLength = 2;
int Dpi = 96;
double LenthPerInch = 25.4;
int BaseLine = 0;
int LeadHeight = 0;
Pen Ecg_Pen;
Graphics Ecg_Graphics;
Bitmap Ecg_Canvas;
public List<int> LeadInfo = new List<int>();
Dictionary<int, List<double>> EcgDataList;
int FreePixs = 0;
Point FirstPosition = new Point(0, 0);
Point SecondPosition = new Point(0, 0);
Dictionary<string, Point> FirstPointArray = new Dictionary<string, Point>();
//存放心电数据的字典 按照 每导联顺序进行存储
Dictionary<int, List<float>> EcgData_Dic = new Dictionary<int, List<float>>();
/// <summary>
///
/// </summary>
/// <param name="pb"></param>
/// <param name="Leads"></param>
/// <param name="EcgTable"></param>
/// <param name="NewDpi"></param>
public void InitEcgParameter(Bitmap btmp, int leadCount, Dictionary<int, List<float>> EcgTable, int NewDpi, List<int> leadinfo)
{
//string[] WavePara = File.ReadAllText(Application.StartupPath + @"\WavePara.txt").Trim().Split(',');
//SamplingRate = int.Parse(WavePara[0].Trim());
//AmplificationFactor = double.Parse(WavePara[1].Trim());
SamplingRate =300;
AmplificationFactor = 10;
Ecg_Canvas = btmp;
Ecg_Graphics = Graphics.FromImage(Ecg_Canvas);
Ecg_Graphics.Clear(Color.White);//填充指定颜色
LeadCount = leadCount;
LeadInfo = leadinfo;
BaseLine = (btmp.Height / LeadInfo.Count) / 2;
LeadHeight = (btmp.Height / (LeadInfo.Count/2));
Dpi = NewDpi;
EcgData_Dic = EcgTable;
Ecg_Pen = new Pen(Color.Gray, float.Parse("0.5"));
FreePixs = int.Parse(Math.Round((double.Parse(Dpi.ToString()) / LenthPerInch) * 5).ToString());
}
/// <summary>
/// 把识别的R波位置标示出来
/// </summary>
/// <param name="rPosList"></param>
public void drawRWavePos(List<int> rPosList)
{
Ecg_Pen = new Pen(Color.Green, float.Parse("1"));
double IntervalPixCountPerPoint = double.Parse("0.102");
for (int i = 0; i < rPosList.Count; i++)
{
double x = double.Parse(rPosList[i].ToString()) * IntervalPixCountPerPoint * 3.3;
int nextX = (int.Parse(Math.Round(x).ToString()));
Point pt1 = new Point(nextX,0); Point pt2 = new Point(nextX, 1024);
Ecg_Graphics.DrawLine(Ecg_Pen, pt1, pt2);
}
}
/// <summary>
/// 绘制心电波形
/// </summary>
public void Draw_EcgWave()
{
Ecg_Pen = new Pen(Color.Black, float.Parse("1"));
//double IntervalPixCountPerPoint = (double.Parse(PaperSpeed.ToString()) / double.Parse(SamplingRate.ToString())) * (double.Parse(Dpi.ToString()) / LenthPerInch);
//double IntervalPixCountPerPoint = double.Parse("0.095");
//double IntervalPixCountPerPoint = double.Parse("0.134");
double IntervalPixCountPerPoint = double.Parse("0.102");
//double IntervalPixCountPerPoint = double.Parse("0.126");
for (int i = 0; i < LeadInfo.Count; i++)
{
int LeadIndex = LeadInfo[i];//取导联下标 0 1 2 3 ...11
if (i < 6)
{
BaseLine = (Ecg_Canvas.Height / (LeadInfo.Count / 2)) / 2 + (i * LeadHeight);
FirstPosition.Y = BaseLine;
FirstPosition.X = FreePixs;
SecondPosition.Y = BaseLine;
SecondPosition.X = FreePixs;
Point FP = new Point(FirstPosition.X + FreePixs, FirstPosition.Y);
FirstPointArray.Add(LeadIndex.ToString(), FP);
}
else
{
BaseLine = (Ecg_Canvas.Height / (LeadInfo.Count / 2)) / 2 + ((i - 6) * LeadHeight);
FirstPosition.Y = BaseLine;
FirstPosition.X = FreePixs + Ecg_Canvas.Width / 2;
SecondPosition.Y = BaseLine;
SecondPosition.X = FreePixs + Ecg_Canvas.Width / 2;
Point FP = new Point(FirstPosition.X + FreePixs, FirstPosition.Y);
FirstPointArray.Add(LeadIndex.ToString(), FP);
}
if (EcgData_Dic.Count > 0)
for (int b = 0; b < EcgData_Dic[LeadIndex].Count; b++)
{
if (i < 6)
{
if (FirstPosition.X > Ecg_Canvas.Width / 2 - 5)
break;
}
else
{
if (FirstPosition.X > Ecg_Canvas.Width)
break;
}
//double c = double.Parse(EcgData_Dic[LeadIndex][b].ToString());
//double d = double.Parse((double.Parse(Dpi.ToString()) / double.Parse("96")).ToString());
//SecondPosition.Y = BaseLine - (int)(c * d);
float y_values = 0;
try
{
//y_values = EcgData_Dic[LeadIndex][b] * (float)(96 / 25.4)*10;
y_values = EcgData_Dic[LeadIndex][b] * (float)(96 / 25.4) * (float)0.041;
}
catch { }
SecondPosition.Y = BaseLine - (Int32)y_values;//后一点Y轴位置
double x = double.Parse(b.ToString()) * IntervalPixCountPerPoint*3.3;
int nextX = (int.Parse(Math.Round(x).ToString()));
if (Math.Abs(FirstPosition.X - SecondPosition.X) < 5)
{
if (i < 6)
{
SecondPosition.X = nextX + FreePixs;
Ecg_Graphics.DrawLine(Ecg_Pen, FirstPosition, SecondPosition);
FirstPosition = SecondPosition;
//Ecg_Graphics.DrawLine(new Pen(Color.Green, float.Parse("1")), FirstPosition.X, BaseLine+150, SecondPosition.X, BaseLine + 150);
}
else
{
SecondPosition.X = Ecg_Canvas.Width / 2 + FreePixs + nextX;
Ecg_Graphics.DrawLine(Ecg_Pen, FirstPosition, SecondPosition);
FirstPosition = SecondPosition;
}
}
else
FirstPosition = SecondPosition;
}
}
}
/// <summary>
/// 绘制心电波形
/// </summary>
public void Draw_EcgWave(int Draw_InitHeight,int BottomHeight)
{
FirstPointArray.Clear();
Draw_InitHeight = Draw_InitHeight * FreePixs;
BottomHeight = BottomHeight * FreePixs;
Ecg_Pen = new Pen(Color.Black, float.Parse("2"));
//double IntervalPixCountPerPoint = (double.Parse(PaperSpeed.ToString()) / double.Parse(SamplingRate.ToString())) * (double.Parse(Dpi.ToString()) / LenthPerInch);
//double IntervalPixCountPerPoint = double.Parse("0.134");
double IntervalPixCountPerPoint = double.Parse("0.296");
for (int i = 0; i < LeadInfo.Count; i++)
{
int LeadIndex = LeadInfo[i];//取导联下标 0 1 2 3 ...11
if (i < 6)
{
//BaseLine = (Ecg_Canvas.Height / (LeadInfo.Count / 2)) / 2 + (i * LeadHeight);
BaseLine = ((Ecg_Canvas.Height - Draw_InitHeight - BottomHeight) / (LeadInfo.Count / 2)) / 2 + (i * ((Ecg_Canvas.Height - Draw_InitHeight - BottomHeight) / (LeadInfo.Count / 2))) + Draw_InitHeight;
FirstPosition.Y = BaseLine;
FirstPosition.X = FreePixs;
SecondPosition.Y = BaseLine;
SecondPosition.X = FreePixs;
Point FP = new Point(FirstPosition.X + FreePixs, FirstPosition.Y);
FirstPointArray.Add(LeadIndex.ToString(), FP);
}
else
{
BaseLine = ((Ecg_Canvas.Height - Draw_InitHeight - BottomHeight) / (LeadInfo.Count / 2)) / 2 + ((i - 6) * ((Ecg_Canvas.Height - Draw_InitHeight - BottomHeight) / (LeadInfo.Count / 2))) + Draw_InitHeight;
FirstPosition.Y = BaseLine;
FirstPosition.X = FreePixs + Ecg_Canvas.Width / 2;
SecondPosition.Y = BaseLine;
SecondPosition.X = FreePixs + Ecg_Canvas.Width / 2;
Point FP = new Point(FirstPosition.X + FreePixs, FirstPosition.Y);
FirstPointArray.Add(LeadIndex.ToString(), FP);
}
for (int b = 0; b < EcgData_Dic[LeadIndex].Count; b+=3)
{
if (i < 6)
{
if (FirstPosition.X > Ecg_Canvas.Width / 2 - 5)
break;
}
else
{
if (FirstPosition.X > Ecg_Canvas.Width)
break;
}
//double c = double.Parse(EcgData_Dic[LeadIndex][b].ToString());
//double d = double.Parse((double.Parse(Dpi.ToString()) / double.Parse("96")).ToString());
//SecondPosition.Y = BaseLine - (int)(c * d);
float y_values = 0;
try
{
//y_values = EcgData_Dic[LeadIndex][b] * (float)(300 / 25.4)*10;
y_values = EcgData_Dic[LeadIndex][b] * (float)(300 / 25.4) * (float)9.5;
}
catch { }
SecondPosition.Y = BaseLine - (Int32)y_values;//后一点Y轴位置
double x = double.Parse(b.ToString()) * IntervalPixCountPerPoint;
int nextX = (int.Parse(Math.Round(x).ToString()));
if (Math.Abs(FirstPosition.X - SecondPosition.X) < 5)
{
if (i < 6)
{
SecondPosition.X = nextX + FreePixs;
Ecg_Graphics.DrawLine(Ecg_Pen, FirstPosition, SecondPosition);
FirstPosition = SecondPosition;
}
else
{
SecondPosition.X = Ecg_Canvas.Width / 2 + FreePixs + nextX;
Ecg_Graphics.DrawLine(Ecg_Pen, FirstPosition, SecondPosition);
FirstPosition = SecondPosition;
}
}
else
FirstPosition = SecondPosition;
}
}
}
/// <summary>
/// 绘制心电报告的报告头
/// </summary>
public void Draw_ReportHeadInfo(string ReportHeadTile, string SectionName,string IdStr)
{
Pen pen_1 = new Pen(Color.Black, float.Parse("4"));
Font font1 = new Font("隶书", 20);
Brush brush = Brushes.Black;
PointF point2 = new PointF(Ecg_Canvas.Width/2-300, FreePixs/2);
Ecg_Graphics.DrawString(ReportHeadTile, font1, brush, point2);
Font font = new Font("宋体", 10);
//PointF point = new PointF(10, FreePixs * 3-20);
//Ecg_Graphics.DrawString("科室:" + SectionName, font, brush, point);
PointF pointId = new PointF(Ecg_Canvas.Width - 3400, FreePixs * 4-20);
Ecg_Graphics.DrawString("ID" + IdStr, font, brush, pointId);
//PointF point1 = new PointF(Ecg_Canvas.Width-1200, FreePixs * 3-20);
//Ecg_Graphics.DrawString("报告日期:" + ReportDate, font, brush, point1);
// Ecg_Graphics.DrawLine(pen_1, 0, FreePixs * 4-60, Ecg_Canvas.Width, FreePixs * 4-60);
}
///// <summary>
///// 绘制患者的心电识别的参数
///// </summary>
//public void Draw_EcgInfo(string[] Diag_Info_List)
//{
// Pen pen_1 = new Pen(Color.Black, float.Parse("4"));
// Font font1 = new Font("宋体", 10);
// Brush brush = Brushes.Black;
// PointF point = new PointF(10, FreePixs * 4+10);
// Ecg_Graphics.DrawString(Diag_Info_List[0], font1, brush, point);//姓名
// PointF point_1 = new PointF(10, FreePixs * 5 + 25);
// Ecg_Graphics.DrawString(Diag_Info_List[1], font1, brush, point_1);//性别
// PointF point_2 = new PointF(10, FreePixs * 6 + 35);
// Ecg_Graphics.DrawString(Diag_Info_List[2], font1, brush, point_2);//年龄
// PointF point_3 = new PointF(600, FreePixs * 4 + 10);
// Ecg_Graphics.DrawString(Diag_Info_List[3], font1, brush, point_3);//P
// PointF point_4 = new PointF(600, FreePixs * 5 + 25);
// Ecg_Graphics.DrawString(Diag_Info_List[4], font1, brush, point_4);//P-R
// PointF point_5 = new PointF(600, FreePixs * 6 + 35);
// Ecg_Graphics.DrawString(Diag_Info_List[5], font1, brush, point_5);//QRS
// PointF point_6 = new PointF(1200, FreePixs * 4 + 10);
// Ecg_Graphics.DrawString(Diag_Info_List[6], font1, brush, point_6);//QT/QTC
// PointF point_7 = new PointF(1200, FreePixs * 5 + 25);
// Ecg_Graphics.DrawString(Diag_Info_List[7], font1, brush, point_7);//QRS电轴
// PointF point_8 = new PointF(1200, FreePixs * 6 + 35);
// Ecg_Graphics.DrawString(Diag_Info_List[8], font1, brush, point_8);//RV5/SV1
// PointF point_9 = new PointF(1800, FreePixs * 4 + 10);
// Ecg_Graphics.DrawString(Diag_Info_List[9], font1, brush, point_9);//心率
// Ecg_Graphics.DrawLine(pen_1, 0, FreePixs * 8, Ecg_Canvas.Width, FreePixs * 8);
//}
/// <summary>
/// 绘制患者的心电识别的参数
/// </summary>
public void Draw_EcgInfo(string[] Diag_Info_List)
{
Pen pen_1 = new Pen(Color.Black, float.Parse("4"));
Font font1 = new Font("宋体", 10);
Brush brush = Brushes.Black;
PointF point = new PointF(600, FreePixs * 4-20);
Ecg_Graphics.DrawString(Diag_Info_List[0], font1, brush, point);//姓名
PointF point_1 = new PointF(1200, FreePixs * 4 -20);
Ecg_Graphics.DrawString(Diag_Info_List[1], font1, brush, point_1);//性别
PointF point_2 = new PointF(1800, FreePixs * 4-20);
Ecg_Graphics.DrawString(Diag_Info_List[2], font1, brush, point_2);//年龄
//PointF point_4 = new PointF(600, FreePixs * 5 + 25);
//Ecg_Graphics.DrawString(Diag_Info_List[3], font1, brush, point_4);//P
PointF point_5 = new PointF(10, FreePixs * 5 + 5);
Ecg_Graphics.DrawString(Diag_Info_List[4], font1, brush, point_5);//P-R
PointF point_6 = new PointF(600, FreePixs * 5 + 5);
Ecg_Graphics.DrawString(Diag_Info_List[5], font1, brush, point_6);//QRS
PointF point_3 = new PointF(1200, FreePixs * 5 + 5);
Ecg_Graphics.DrawString(Diag_Info_List[9], font1, brush, point_3);//心率
PointF point_7 = new PointF(10, FreePixs * 6 + 35);
Ecg_Graphics.DrawString(Diag_Info_List[6], font1, brush, point_7);//QT/QTC
PointF point_8 = new PointF(600, FreePixs * 6 + 35);
Ecg_Graphics.DrawString(Diag_Info_List[7], font1, brush, point_8);//QRS电轴
PointF point_9 = new PointF(1200, FreePixs * 6 + 35);
Ecg_Graphics.DrawString(Diag_Info_List[8], font1, brush, point_9);//RV5/SV1
Ecg_Graphics.DrawLine(pen_1, 0, FreePixs * 8, Ecg_Canvas.Width, FreePixs * 8);
}
/// <summary>
/// 绘制医生的诊断结果
/// </summary>
public void Draw_DiagInfo(string DiagInfoContent,string ReportDoctorName,string ReportDate,string Filter,string collectTime,string dept)
{
string[] diagresultecontent = new string[DiagInfoContent.Length/48+1];
for (int a = 0; a < DiagInfoContent.Length / 48 + 1;a++ )
{
if (a < DiagInfoContent.Length / 48)
diagresultecontent[a] = DiagInfoContent.Substring(a * 48, 48);
else
diagresultecontent[a] = DiagInfoContent.Substring(a * 48, DiagInfoContent.Length - a * 48);
}
Pen pen_1 = new Pen(Color.Black, float.Parse("4"));
Font font1 = new Font("宋体", 12);
Brush brush = Brushes.Black;
Ecg_Graphics.DrawLine(pen_1, 0, Ecg_Canvas.Height - FreePixs * 6, Ecg_Canvas.Width, Ecg_Canvas.Height - FreePixs * 6);
PointF point1 = new PointF(10, Ecg_Canvas.Height - FreePixs * 6 + 10);
Ecg_Graphics.DrawString("诊断提示:", font1, brush, point1);//诊断结果
for (int i = 0; i < diagresultecontent.Length; i++)
{
PointF point5 = new PointF(230, Ecg_Canvas.Height - FreePixs * (6-i) + 10);
Ecg_Graphics.DrawString(diagresultecontent[i].Trim(), font1, brush, point5);//诊断结果
}
PointF pointb = new PointF(Ecg_Canvas.Width - 1800, Ecg_Canvas.Height - FreePixs * 2);
Ecg_Graphics.DrawString("科室:" + dept, font1, brush, pointb);//报告医生
PointF point2 = new PointF(Ecg_Canvas.Width - 1200, Ecg_Canvas.Height - FreePixs * 2);
Ecg_Graphics.DrawString("报告医生:" + ReportDoctorName, font1, brush, point2);//报告医生
PointF point9 = new PointF(Ecg_Canvas.Width - 600, Ecg_Canvas.Height - FreePixs * 2);
Ecg_Graphics.DrawString("报告日期:" + ReportDate, font1, brush, point9);//报告医生
PointF point10 = new PointF(1800, FreePixs * 6 + 35);
Ecg_Graphics.DrawString("25mm/s 10mm/mV " + Filter, font1, brush, point10);//振幅 走纸速度 滤波
PointF point11 = new PointF(Ecg_Canvas.Width - 600, Ecg_Canvas.Height - FreePixs * 7 - 5);
Ecg_Graphics.DrawString(collectTime, font1, brush, point11);//波形的起始时间点
Ecg_Graphics.DrawLine(pen_1, 0, Ecg_Canvas.Height - FreePixs, Ecg_Canvas.Width, Ecg_Canvas.Height - FreePixs);
}
///// <summary>
///// 绘制心电波形
///// </summary>
//public void Draw_EcgWave()
//{
// Ecg_Pen = new Pen(Color.Black, float.Parse("0.5"));
// for (int i = 0; i < LeadInfo.Count; i++)
// {
// int LeadIndex = LeadInfo[i];//取导联下标 0 1 2 3 ...11
// BaseLine = (Ecg_Canvas.Height / LeadInfo.Count) / 2 + (i * LeadHeight);
// FirstPosition.Y = BaseLine;
// FirstPosition.X = FreePixs;
// SecondPosition.Y = BaseLine;
// SecondPosition.X = FreePixs;
// Point FP = new Point(FirstPosition.X + FreePixs, FirstPosition.Y);
// FirstPointArray.Add(LeadIndex.ToString(), FP);
// for (int b = 0; b < EcgDataList[LeadIndex].Count; b++)
// {
// if (FirstPosition.X > Ecg_Canvas.Width)
// break;
// if (EcgDataList[LeadIndex][b] > 0)
// SecondPosition.Y = Math.Abs(BaseLine - EcgDataList[LeadIndex][b]);
// if (EcgDataList[LeadIndex][b] < 0)
// SecondPosition.Y = BaseLine + Math.Abs(EcgDataList[LeadIndex][b]);
// double x = double.Parse(b.ToString()) * (double.Parse(Dpi.ToString()) / double.Parse(SamplingRate.ToString()));//获得点的X轴位置
// int nextX = (int.Parse(Math.Round(x).ToString()));
// if (Math.Abs(FirstPosition.X - SecondPosition.X) < 5)
// {
// SecondPosition.X = nextX + FreePixs;
// Ecg_Graphics.DrawLine(Ecg_Pen, FirstPosition, SecondPosition);
// FirstPosition = SecondPosition;
// }
// else
// FirstPosition = SecondPosition;
// }
// }
//}
///// <summary>
///// 绘制心电图的背景网格
///// </summary>
//public void Draw_EcgBackGroundGrid()
//{
// Ecg_Pen = new Pen(Color.LightCoral, float.Parse("0.1"));
// bool shuxianFlag = false;
// double PointCountPerMM = Math.Abs(double.Parse(Dpi.ToString()) / LenthPerInch);
// int x = 0;
// int y = 0;
// for (int p = 0; p < Ecg_Canvas.Height / PointCountPerMM; p++)
// {
// for (int R = 0; R < Ecg_Canvas.Width / PointCountPerMM; R++)
// {
// if (x % 5 == 0 && !shuxianFlag)
// {
// Ecg_Graphics.DrawLine(Ecg_Pen, x, 0, x, Ecg_Canvas.Height);
// }
// x += int.Parse(Math.Round(double.Parse(PointCountPerMM.ToString("0.0"))).ToString());
// if (x < Ecg_Canvas.Width && y < Ecg_Canvas.Height)
// {
// Ecg_Canvas.SetPixel(x, y, Color.LightCoral);
// }
// else
// {
// x = 0;
// break;
// }
// }
// shuxianFlag = true;
// if (y % 5 == 0)
// {
// Ecg_Graphics.DrawLine(Ecg_Pen, 0, y, Ecg_Canvas.Width, y);
// }
// y += int.Parse(Math.Round(double.Parse(PointCountPerMM.ToString("0.0"))).ToString());
// if (y > Ecg_Canvas.Height)
// {
// break;
// }
// }
//}
/// <summary>
/// 绘制心电图的背景网格
/// </summary>
public void Draw_EcgBackGroundGrid()
{
Ecg_Pen = new Pen(Color.LightCoral, float.Parse("0.1"));
//Ecg_Pen = new Pen(Color.Black, float.Parse("0.1"));
bool shuxianFlag = false;
double PointCountPerMM = Math.Abs(double.Parse(Dpi.ToString()) / LenthPerInch);
int x = 0;
int y = 0;
for (int p = 0; p < Ecg_Canvas.Height / PointCountPerMM; p++)
{
for (int R = 0; R < Ecg_Canvas.Width / PointCountPerMM; R++)
{
if (x % 5 == 0 && !shuxianFlag)
{
Ecg_Graphics.DrawLine(Ecg_Pen, x, 0, x, Ecg_Canvas.Height);
}
x += int.Parse(Math.Round(double.Parse(PointCountPerMM.ToString("0.0"))).ToString());
if (x < Ecg_Canvas.Width && y < Ecg_Canvas.Height)
{
Ecg_Canvas.SetPixel(x, y, Color.Black);
}
else
{
x = 0;
break;
}
}
shuxianFlag = true;
if (y % 5 == 0)
{
Ecg_Graphics.DrawLine(Ecg_Pen, 0, y, Ecg_Canvas.Width, y);
}
y += int.Parse(Math.Round(double.Parse(PointCountPerMM.ToString("0.0"))).ToString());
if (y > Ecg_Canvas.Height)
{
break;
}
}
}
/// <summary>
/// 绘制心电图的背景网格
/// </summary>
public void Draw_EcgBackGroundGrid(int height1,int height2,int PenWidth)
{
if (PenWidth == 0)
Ecg_Pen = new Pen(Color.LightCoral, float.Parse("0.1"));
else
Ecg_Pen = new Pen(Color.Black, float.Parse("1"));
//Ecg_Pen = new Pen(Color.Black, PenWidth);
bool shuxianFlag = false;
double PointCountPerMM = Math.Abs(double.Parse(Dpi.ToString()) / LenthPerInch);
height1 = height1 * (int)PointCountPerMM;
height2 = height2 * (int)PointCountPerMM;
int x = 0;
int y = 0;
for (int p = 0; p < Ecg_Canvas.Height / PointCountPerMM; p++)
{
for (int R = 0; R < Ecg_Canvas.Width / PointCountPerMM; R++)
{
if (x % 5 == 0 && !shuxianFlag)
{
//Ecg_Graphics.DrawLine(Ecg_Pen, x, 0, x, Ecg_Canvas.Height);
Ecg_Graphics.DrawLine(Ecg_Pen, x, height1, x, height2);
}
x += int.Parse(Math.Round(double.Parse(PointCountPerMM.ToString("0.0"))).ToString());
if (x < Ecg_Canvas.Width && y < Ecg_Canvas.Height)
{
if (y >= height1 && y <= height2)
Ecg_Canvas.SetPixel(x, y, Color.Black);
//Ecg_Canvas.SetPixel(x, y, Color.LightCoral);
}
else
{
x = 0;
break;
}
}
shuxianFlag = true;
if (y % 5 == 0)
{
if (y >= height1 && y <= height2)
Ecg_Graphics.DrawLine(Ecg_Pen, 0, y, Ecg_Canvas.Width, y);
}
y += int.Parse(Math.Round(double.Parse(PointCountPerMM.ToString("0.0"))).ToString());
if (y > Ecg_Canvas.Height)
{
break;
}
}
}
/// <summary>
/// 绘制心电图的大网格 5mm大网格
/// </summary>
public void Draw_BigGrid()
{
Ecg_Pen = new Pen(Color.LightCoral, float.Parse("0.1"));
bool shuxianFlag = false;
double PointCountPerMM = Math.Abs(double.Parse(Dpi.ToString()) / LenthPerInch);
int x = 0;
int y = 0;
for (int p = 0; p < Ecg_Canvas.Height / PointCountPerMM; p++)
{
for (int R = 0; R < Ecg_Canvas.Width / PointCountPerMM; R++)
{
if (x % 5 == 0 && !shuxianFlag)
{
Ecg_Graphics.DrawLine(Ecg_Pen, x, 0, x, Ecg_Canvas.Height);
}
x += int.Parse(Math.Round(double.Parse(PointCountPerMM.ToString("0.0"))).ToString());
if (x < Ecg_Canvas.Width && y < Ecg_Canvas.Height)
{
//Ecg_Canvas.SetPixel(x, y, Color.LightCoral);
}
else
{
x = 0;
break;
}
}
shuxianFlag = true;
if (y % 5 == 0)
{
Ecg_Graphics.DrawLine(Ecg_Pen, 0, y, Ecg_Canvas.Width, y);
}
y += int.Parse(Math.Round(double.Parse(PointCountPerMM.ToString("0.0"))).ToString());
if (y > Ecg_Canvas.Height)
{
break;
}
}
}
/// <summary>
/// 绘制心电图的定标电压和导联名称
/// </summary>
public void Draw_CalibrationVoltage_And_LeadName()
{
Ecg_Pen = new Pen(Color.Black, float.Parse("1.5"));
string[] LeadNameArray = new string[12] { "I", "II", "III", "aVR", "aVL", "aVF", "V1", "V2", "V3", "V4", "V5", "V6" };
for (int d = 0; d < LeadInfo.Count; d++)
{
if (d < 6)
{
Ecg_Graphics.DrawLine(Ecg_Pen, 0, FirstPointArray[LeadInfo[d].ToString()].Y, Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) / 3).ToString()), FirstPointArray[LeadInfo[d].ToString()].Y);
Ecg_Graphics.DrawLine(Ecg_Pen, Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) / 3).ToString()), FirstPointArray[LeadInfo[d].ToString()].Y, Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) / 3).ToString()), FirstPointArray[LeadInfo[d].ToString()].Y - Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) * 2).ToString()));
Ecg_Graphics.DrawLine(Ecg_Pen, Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) / 3).ToString()), FirstPointArray[LeadInfo[d].ToString()].Y - Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) * 2).ToString()), Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) / 3).ToString()) * 2, FirstPointArray[LeadInfo[d].ToString()].Y - Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) * 2).ToString()));
Ecg_Graphics.DrawLine(Ecg_Pen, Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) / 3).ToString()) * 2, FirstPointArray[LeadInfo[d].ToString()].Y - Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) * 2).ToString()), Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) / 3).ToString()) * 2, FirstPointArray[LeadInfo[d].ToString()].Y);
Ecg_Graphics.DrawLine(Ecg_Pen, Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) / 3).ToString()) * 2, FirstPointArray[LeadInfo[d].ToString()].Y, Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) / 3).ToString()) * 3, FirstPointArray[LeadInfo[d].ToString()].Y);
string str = LeadNameArray[LeadInfo[d]];
Font font = new Font("宋体", 11);
Brush brush = Brushes.Black;
if (d < FirstPointArray.Count)
{
PointF point = new PointF(0, FirstPointArray[LeadInfo[d].ToString()].Y);
Ecg_Graphics.DrawString(str, font, brush, point);
}
}
else
{
Ecg_Graphics.DrawLine(Ecg_Pen, Ecg_Canvas.Width / 2, FirstPointArray[LeadInfo[d].ToString()].Y, Ecg_Canvas.Width / 2+Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) / 3).ToString()), FirstPointArray[LeadInfo[d].ToString()].Y);
Ecg_Graphics.DrawLine(Ecg_Pen, Ecg_Canvas.Width / 2 + Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) / 3).ToString()), FirstPointArray[LeadInfo[d].ToString()].Y, Ecg_Canvas.Width / 2 + Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) / 3).ToString()), FirstPointArray[LeadInfo[d].ToString()].Y - 2 * FreePixs);
Ecg_Graphics.DrawLine(Ecg_Pen, Ecg_Canvas.Width / 2 + Int16.Parse(Math.Round(double.Parse(FreePixs.ToString()) / 3).ToString()), FirstPointArray[LeadInfo[d].ToString()].Y - 2 * FreePixs, Ecg_Canvas.Width / 2 + Int16.Parse(Math.Round((double.Parse(FreePixs.ToString()) / 3)*2).ToString()), FirstPointArray[LeadInfo[d].ToString()].Y - 2 * FreePixs);
Ecg_Graphics.DrawLine(Ecg_Pen, Ecg_Canvas.Width / 2 + Int16.Parse(Math.Round((double.Parse(FreePixs.ToString()) / 3) * 2).ToString()), FirstPointArray[LeadInfo[d].ToString()].Y - 2 * FreePixs, Ecg_Canvas.Width / 2 + Int16.Parse(Math.Round((double.Parse(FreePixs.ToString()) / 3) * 2).ToString()), FirstPointArray[LeadInfo[d].ToString()].Y);
Ecg_Graphics.DrawLine(Ecg_Pen, Ecg_Canvas.Width / 2 + (FreePixs / 3) * 2, FirstPointArray[LeadInfo[d].ToString()].Y, Ecg_Canvas.Width / 2 + FreePixs, FirstPointArray[LeadInfo[d].ToString()].Y);
string str = LeadNameArray[LeadInfo[d]];
Font font = new Font("宋体", 11);
Brush brush = Brushes.Black;
if (d < FirstPointArray.Count)
{
PointF point = new PointF(Ecg_Canvas.Width / 2, FirstPointArray[LeadInfo[d].ToString()].Y);
Ecg_Graphics.DrawString(str, font, brush, point);
}
}
}
}
/// <summary>
/// 获得心电数据
/// </summary>
/// <returns></returns>
public Dictionary<int, List<double>> GetEcgData(DataTable EcgDataTable)
{
string[] WavePara = File.ReadAllText(Application.StartupPath + @"\WavePara.txt").Trim().Split(',');
SamplingRate = int.Parse(WavePara[0].Trim());
AmplificationFactor = double.Parse(WavePara[1].Trim());
Dictionary<int, List<double>> get_EcgDataList = new Dictionary<int, List<double>>();
for (int y = 0; y < EcgDataTable.Rows.Count; y++)
{
byte[] ecgdata = (byte[])EcgDataTable.Rows[y]["pureData"];
Int16[,] ecg = new Int16[LeadCount, ecgdata.Length / (LeadCount * byteLength)];
Int16[,] EcgPixData = new Int16[LeadCount, ecgdata.Length / (LeadCount * byteLength)];
int index = 0;
for (int q = 0; q < LeadCount; q++)
{
for (int i = 0; i < SamplingRate*5; i++)
{
byte a = ecgdata[index];
index++;
byte b = ecgdata[index];
index++;
ecg[q, i] = (Int16)(a + (b << 8));
string sss = ((double.Parse(ecg[q, i].ToString()) / AmplificationFactor) * 10.0).ToString();
double cc = double.Parse(sss) * double.Parse(Dpi.ToString()) / double.Parse(LenthPerInch.ToString());
if (get_EcgDataList.ContainsKey(q))
get_EcgDataList[q].Add(cc);
//get_EcgDataList[q].Add(short.Parse(cc.ToString()));
else
{
short f = (short)cc;
List<double> ecg_List = new List<double>();
ecg_List.Add((double)f);
//ecg_List.Add(short.Parse(cc.ToString()));
get_EcgDataList.Add(q, ecg_List);
}
}
}
}
return get_EcgDataList;
}
/// <summary>
/// 获得心电数据
/// </summary>
/// <returns></returns>
public Dictionary<int, List<float>> GetEcgData(DataTable EcgDataTable,bool ReturnFloat)
{
string[] WavePara = File.ReadAllText(Application.StartupPath + @"\WavePara.txt").Trim().Split(',');
SamplingRate = int.Parse(WavePara[0].Trim());
AmplificationFactor = double.Parse(WavePara[1].Trim());
Dictionary<int, List<float>> get_EcgDataList = new Dictionary<int, List<float>>();
for (int y = 0; y < EcgDataTable.Rows.Count; y++)
{
byte[] ecgdata = (byte[])EcgDataTable.Rows[y]["pureData"];
Int16[,] ecg = new Int16[LeadCount, ecgdata.Length / (LeadCount * byteLength)];
Int16[,] EcgPixData = new Int16[LeadCount, ecgdata.Length / (LeadCount * byteLength)];
int index = 0;
for (int q = 0; q < LeadCount; q++)
{
for (int i = 0; i < SamplingRate*5; i++)
{
byte a = ecgdata[index];
index++;
byte b = ecgdata[index];
index++;
ecg[q, i] = (Int16)(a + (b << 8));
double sss = double.Parse(ecg[q, i].ToString()) / AmplificationFactor;
float resulte_cc = (float)sss;
//double cc = double.Parse(sss) * double.Parse(Dpi.ToString()) / double.Parse(LenthPerInch.ToString());
if (get_EcgDataList.ContainsKey(q))
get_EcgDataList[q].Add(resulte_cc);
//get_EcgDataList[q].Add(short.Parse(cc.ToString()));
else
{
List<float> ecg_List = new List<float>();
ecg_List.Add(resulte_cc);
get_EcgDataList.Add(q, ecg_List);
}
}
}
}
return get_EcgDataList;
}
///// <summary>
///// 波形放大或缩小
///// </summary>
//public void AmplifyOrLessen(int OptionParameter)
//{
// // double a = Math.Abs(double.Parse(Dpi.ToString()) / LenthPerInch) * OptionParameter;
// // int WaveAmplify = (int)a;
// Ecg_Pen = new Pen(Color.Black, float.Parse("0.5"));
// for (int i = 0; i < LeadInfo.Count; i++)
// {
// int LeadIndex = LeadInfo[i];//取导联下标 0 1 2 3 ...11
// BaseLine = (Ecg_Canvas.Height / LeadInfo.Count) / 2 + (i * LeadHeight);
// FirstPosition.Y = BaseLine;
// FirstPosition.X = FreePixs;
// SecondPosition.Y = BaseLine;
// SecondPosition.X = FreePixs;
// Point FP = new Point(FirstPosition.X + FreePixs, FirstPosition.Y);
// FirstPointArray.Add(LeadIndex.ToString(), FP);
// for (int b = 0; b < EcgDataList[LeadIndex].Count; b++)
// {
// if (FirstPosition.X > Ecg_Canvas.Width)
// break;
// if (EcgDataList[LeadIndex][b] > 0)
// SecondPosition.Y = Math.Abs(BaseLine - EcgDataList[LeadIndex][b]) + OptionParameter;
// if (EcgDataList[LeadIndex][b] < 0)
// SecondPosition.Y = BaseLine + Math.Abs(EcgDataList[LeadIndex][b]) + OptionParameter;
// double x = double.Parse(b.ToString()) * (double.Parse(Dpi.ToString()) / double.Parse(SamplingRate.ToString())) * (PaperSpeed * OptionParameter)/Amplitude;//获得点的X轴位置
// int nextX = (int.Parse(Math.Round(x).ToString()));
// if (Math.Abs(FirstPosition.X - SecondPosition.X) < 5)
// {
// SecondPosition.X = nextX + FreePixs;
// Ecg_Graphics.DrawLine(Ecg_Pen, FirstPosition, SecondPosition);
// FirstPosition = SecondPosition;
// }
// else
// FirstPosition = SecondPosition;
// }
// }
//}
//**************************动态播放十二导联波形************************************************************************************
/// <summary>
/// 绘制屏幕墙窗体背景
/// </summary>
/// <param name="Graphics"></param>
public void DrawBackGround(Graphics Graphics)
{
Graphics.FillRectangle(Brushes.White, Graphics.ClipBounds);
}
public void DrawStandardGrid(PictureBox EV, Graphics Graphics)
{
int GridSize = int.Parse((Math.Round(double.Parse("96") * double.Parse("5") / double.Parse("25.4"))).ToString());
Pen GridColor = new Pen(Color.LightCoral, float.Parse("0.1"));
//绘制网格大格竖线
for (int i = 0; i < EV.Width; i += GridSize)
{
Graphics.DrawLine(GridColor, i, 0, i, EV.Height);
}
//绘制网格大格横线
for (int i = 0; i < EV.Height; i += GridSize)
{
Graphics.DrawLine(GridColor, 0, i, EV.Width, i);
}
}
DateTime CurrentDateTime;
string V_WardshipId = string.Empty;
int Ecg_Index = 0;//数据队列中的游标
double PixCountPerPoint;//求出 心电 相邻两点之间的 像素点个数
/// <summary>
/// 绘制心电波形
/// </summary>
//public void Play_EcgWave(PictureEdit pictureEdit3, Graphics Graphics_1, string WardshipId, DateTime CurrDatetime)
//{
// PixCountPerPoint = double.Parse("0.3");
// V_WardshipId = WardshipId;
// if (CurrDatetime != null)
// CurrentDateTime = CurrDatetime;
// Ecg_Pen = new Pen(Color.Black, float.Parse("0.5"));//心电波形颜色
// FirstPointArray.Clear();
// LeadHeight = pictureEdit3.Height / LeadInfo.Count;
// FreePixs = int.Parse(Math.Round((double.Parse(Dpi.ToString()) / LenthPerInch) * 5).ToString());
// for (int i = 0; i < LeadInfo.Count; i++)
// {
// int LeadIndex = LeadInfo[i];//取导联下标 0 1 2 3 ...11
// BaseLine = (pictureEdit3.Height / LeadInfo.Count) / 2 + (i * LeadHeight);
// FirstPosition.Y = BaseLine;
// FirstPosition.X = FreePixs;
// SecondPosition.Y = BaseLine;
// SecondPosition.X = FreePixs;
// Point FP = new Point(FirstPosition.X + FreePixs, FirstPosition.Y);
// FirstPointArray.Add(LeadIndex.ToString(), FP);
// int ScreenPointCount = (int)(double.Parse(pictureEdit3.Width.ToString()) / PixCountPerPoint);
// for (int b = Ecg_Index; b < Ecg_Index + ScreenPointCount; b++)
// {
// if (EcgDataList == null)
// LoadEcgData_BaseDatabase(WardshipId);//加载心电数据队列
// else
// if (EcgDataList[LeadIndex].Count <= 0 || b + 500 >= EcgDataList[LeadIndex].Count)
// LoadEcgData_BaseDatabase(WardshipId);//加载心电数据队列
// if (b + 1 >= EcgDataList[LeadIndex].Count)
// {
// Graphics_1.DrawLine(new Pen(Brushes.Black), 0, pictureEdit3.Height / 2, pictureEdit3.Width, pictureEdit3.Height / 2);
// }
// else
// {
// if (FirstPosition.X > pictureEdit3.Width)
// break;
// if (EcgDataList[LeadIndex][b] > 0)
// SecondPosition.Y = Math.Abs(BaseLine - EcgDataList[LeadIndex][b]);
// if (EcgDataList[LeadIndex][b] < 0)
// SecondPosition.Y = BaseLine + Math.Abs(EcgDataList[LeadIndex][b]);
// double x = double.Parse(b.ToString()) * (double.Parse(Dpi.ToString()) / double.Parse(SamplingRate.ToString()));//获得点的X轴位置
// int nextX = (int.Parse(Math.Round(x).ToString()));
// if (Math.Abs(FirstPosition.X - SecondPosition.X) < 5)
// {
// SecondPosition.X = nextX + FreePixs;
// //Ecg_Graphics.DrawLine(Ecg_Pen, FirstPosition, SecondPosition);
// Graphics_1.DrawLine(Ecg_Pen, FirstPosition, SecondPosition);
// FirstPosition = SecondPosition;
// }
// else
// FirstPosition = SecondPosition;
// }
// }
// }
// Ecg_Index += 14;
//}
}
}

289
1200Gxml心电图绘制/Form3.Designer.cs generated Normal file
View File

@ -0,0 +1,289 @@
namespace _1200Gxml心电图绘制
{
partial class Form3
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.cBoxSpeed = new System.Windows.Forms.ComboBox();
this.cBoxAmplitude = new System.Windows.Forms.ComboBox();
this.label3 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.combo_reportModel = new System.Windows.Forms.ComboBox();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.txt_msg = new System.Windows.Forms.TextBox();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.contextMenuStrip1.SuspendLayout();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.tabControl1.SuspendLayout();
this.tabPage1.SuspendLayout();
this.tabPage2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// contextMenuStrip1
//
this.contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(24, 24);
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ToolStripMenuItem});
this.contextMenuStrip1.Name = "contextMenuStrip1";
this.contextMenuStrip1.Size = new System.Drawing.Size(280, 38);
//
// 生成高精度打印报告ToolStripMenuItem
//
this.ToolStripMenuItem.Font = new System.Drawing.Font("Microsoft YaHei UI", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.ToolStripMenuItem.Name = "生成高精度打印报告ToolStripMenuItem";
this.ToolStripMenuItem.Size = new System.Drawing.Size(279, 34);
this.ToolStripMenuItem.Text = "生成高精度打印报告";
this.ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
//
// groupBox1
//
this.groupBox1.Controls.Add(this.cBoxSpeed);
this.groupBox1.Controls.Add(this.cBoxAmplitude);
this.groupBox1.Controls.Add(this.label3);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Controls.Add(this.combo_reportModel);
this.groupBox1.Dock = System.Windows.Forms.DockStyle.Top;
this.groupBox1.Location = new System.Drawing.Point(0, 0);
this.groupBox1.Margin = new System.Windows.Forms.Padding(2);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Padding = new System.Windows.Forms.Padding(2);
this.groupBox1.Size = new System.Drawing.Size(1185, 67);
this.groupBox1.TabIndex = 5;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "操作";
//
// cBoxSpeed
//
this.cBoxSpeed.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cBoxSpeed.Font = new System.Drawing.Font("微软雅黑", 12F);
this.cBoxSpeed.FormattingEnabled = true;
this.cBoxSpeed.Items.AddRange(new object[] {
"5mm/s",
"10mm/s",
"12.5mm/s",
"25mm/s",
"50mm/s"});
this.cBoxSpeed.Location = new System.Drawing.Point(422, 28);
this.cBoxSpeed.Name = "cBoxSpeed";
this.cBoxSpeed.Size = new System.Drawing.Size(113, 29);
this.cBoxSpeed.TabIndex = 4;
this.cBoxSpeed.SelectedIndexChanged += new System.EventHandler(this.cBoxSpeed_SelectedIndexChanged);
//
// cBoxAmplitude
//
this.cBoxAmplitude.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cBoxAmplitude.Font = new System.Drawing.Font("微软雅黑", 12F);
this.cBoxAmplitude.FormattingEnabled = true;
this.cBoxAmplitude.Items.AddRange(new object[] {
"2.5mm/mv",
"5mm/mv",
"10mm/mv",
"20mm/mv",
"40mm/mv"});
this.cBoxAmplitude.Location = new System.Drawing.Point(648, 28);
this.cBoxAmplitude.Name = "cBoxAmplitude";
this.cBoxAmplitude.Size = new System.Drawing.Size(105, 29);
this.cBoxAmplitude.TabIndex = 5;
this.cBoxAmplitude.SelectedIndexChanged += new System.EventHandler(this.cBoxAmplitude_SelectedIndexChanged);
//
// label3
//
this.label3.AutoSize = true;
this.label3.Font = new System.Drawing.Font("微软雅黑", 12F);
this.label3.Location = new System.Drawing.Point(586, 33);
this.label3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(58, 21);
this.label3.TabIndex = 3;
this.label3.Text = "增益:";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("微软雅黑", 12F);
this.label2.Location = new System.Drawing.Point(360, 33);
this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(58, 21);
this.label2.TabIndex = 3;
this.label2.Text = "走速:";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("微软雅黑", 12F);
this.label1.Location = new System.Drawing.Point(32, 33);
this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(90, 21);
this.label1.TabIndex = 3;
this.label1.Text = "报告版式:";
//
// combo_reportModel
//
this.combo_reportModel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.combo_reportModel.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.combo_reportModel.FormattingEnabled = true;
this.combo_reportModel.Items.AddRange(new object[] {
"6x2报告模式",
"6x2任意长两导联",
"12x1报告模式",
"4x3任意单长模式",
"4x3任意长三导联"});
this.combo_reportModel.Location = new System.Drawing.Point(126, 28);
this.combo_reportModel.Name = "combo_reportModel";
this.combo_reportModel.Size = new System.Drawing.Size(223, 29);
this.combo_reportModel.TabIndex = 2;
this.combo_reportModel.SelectedIndexChanged += new System.EventHandler(this.combo_reportModel_SelectedIndexChanged);
//
// groupBox2
//
this.groupBox2.Controls.Add(this.tabControl1);
this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox2.Location = new System.Drawing.Point(0, 67);
this.groupBox2.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Padding = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.groupBox2.Size = new System.Drawing.Size(1185, 574);
this.groupBox2.TabIndex = 6;
this.groupBox2.TabStop = false;
//
// tabControl1
//
this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Location = new System.Drawing.Point(5, 20);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(1175, 554);
this.tabControl1.TabIndex = 1;
//
// tabPage1
//
this.tabPage1.Controls.Add(this.txt_msg);
this.tabPage1.Location = new System.Drawing.Point(4, 22);
this.tabPage1.Name = "tabPage1";
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
this.tabPage1.Size = new System.Drawing.Size(1167, 528);
this.tabPage1.TabIndex = 0;
this.tabPage1.Text = "服务日志";
this.tabPage1.UseVisualStyleBackColor = true;
//
// txt_msg
//
this.txt_msg.BackColor = System.Drawing.Color.Black;
this.txt_msg.Dock = System.Windows.Forms.DockStyle.Fill;
this.txt_msg.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.txt_msg.ForeColor = System.Drawing.Color.GreenYellow;
this.txt_msg.Location = new System.Drawing.Point(3, 3);
this.txt_msg.Margin = new System.Windows.Forms.Padding(2);
this.txt_msg.Multiline = true;
this.txt_msg.Name = "txt_msg";
this.txt_msg.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.txt_msg.Size = new System.Drawing.Size(1161, 522);
this.txt_msg.TabIndex = 1;
//
// tabPage2
//
this.tabPage2.Controls.Add(this.pictureBox1);
this.tabPage2.Location = new System.Drawing.Point(4, 22);
this.tabPage2.Name = "tabPage2";
this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
this.tabPage2.Size = new System.Drawing.Size(1167, 528);
this.tabPage2.TabIndex = 1;
this.tabPage2.Text = "tabPage2";
this.tabPage2.UseVisualStyleBackColor = true;
//
// pictureBox1
//
this.pictureBox1.ContextMenuStrip = this.contextMenuStrip1;
this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill;
this.pictureBox1.Location = new System.Drawing.Point(3, 3);
this.pictureBox1.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(1161, 522);
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
//
// Form3
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1185, 641);
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.groupBox1);
this.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
this.Name = "Form3";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "心电图绘制";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form3_FormClosed);
this.Load += new System.EventHandler(this.Form3_Load);
this.contextMenuStrip1.ResumeLayout(false);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.groupBox2.ResumeLayout(false);
this.tabControl1.ResumeLayout(false);
this.tabPage1.ResumeLayout(false);
this.tabPage1.PerformLayout();
this.tabPage2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
private System.Windows.Forms.ToolStripMenuItem ToolStripMenuItem;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ComboBox combo_reportModel;
private System.Windows.Forms.ComboBox cBoxSpeed;
private System.Windows.Forms.ComboBox cBoxAmplitude;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TabControl tabControl1;
private System.Windows.Forms.TabPage tabPage1;
private System.Windows.Forms.TabPage tabPage2;
private System.Windows.Forms.TextBox txt_msg;
}
}

View File

@ -0,0 +1,510 @@
using HTTPServerLib;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Text;
using System.Windows.Forms;
using ;
namespace _1200Gxml心电图绘制
{
public partial class Form3 : Form
{
ExampleServer server;
public Form3()
{
InitializeComponent();
}
void DataRead()
{
}
private void Form3_Load(object sender, EventArgs e)
{
string strip = ConfigurationManager.AppSettings["ip"];
string stport = ConfigurationManager.AppSettings["port"];
server = new ExampleServer(strip, int.Parse(stport), txt_msg);
EcgDataDraw_New EDDN = new EcgDataDraw_New();
var btmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.Image = btmp;
Graphics Ecg_Graphics = Graphics.FromImage(pictureBox1.Image);
combo_reportModel.SelectedIndex = 0;
cBoxSpeed.SelectedIndex = 3;
cBoxAmplitude.SelectedIndex = 2;
Start();
//加载心电数据
// #region
//Dictionary<int, List<float>> EcgTable = new Dictionary<int, List<float>>();
//for (int k = 0; k < 8; k++)
// EcgTable.Add(k, new List<float>());
//string contentStr = File.ReadAllText(Application.StartupPath + @"\蓝牙holter数据\dc93ee94-c0e8-4dba-8d29-ed86b2dcb6e8.ecg");
//var contenList = JsonConvert.DeserializeObject<List<byte[]>>(contentStr);
////这里是把8个通道的数据转换出来 放到一个 字典里
//for (int i = 0; i < contenList.Count; i++)
//{
// for (int j = 0; j < contenList[i].Length; j += 16)
// {
// EcgTable[0].Add((float)((short)(byteToShort(contenList[i][j], contenList[i][j + 1]))));
// EcgTable[1].Add((float)((short)(byteToShort(contenList[i][j + 2], contenList[i][j + 3]))));
// EcgTable[2].Add((float)((short)(byteToShort(contenList[i][j + 4], contenList[i][j + 5]))));
// EcgTable[3].Add((float)((short)(byteToShort(contenList[i][j + 6], contenList[i][j + 7]))));
// EcgTable[4].Add((float)((short)(byteToShort(contenList[i][j + 8], contenList[i][j + 9]))));
// EcgTable[5].Add((float)((short)(byteToShort(contenList[i][j + 10], contenList[i][j + 11]))));
// EcgTable[6].Add((float)((short)(byteToShort(contenList[i][j + 12], contenList[i][j + 13]))));
// EcgTable[7].Add((float)((short)(byteToShort(contenList[i][j + 14], contenList[i][j + 15]))));
// }
//}
////在这里你就可以对这8个通道的数据进行滤波了 在这里写滤波代码
//Dictionary<int, List<float>> EcgTable2 = new Dictionary<int, List<float>>();
////把 I II导联加入字典中
//for (int i = 0; i < 2; i++)
// EcgTable2.Add(i, EcgTable[i]);
//List<float> list3 = new List<float>();
//List<float> list4 = new List<float>();
//List<float> list5 = new List<float>();
//List<float> list6 = new List<float>();
////把 III AVR AVL AVF 这四个导联计算出来 加入字典
//for (int A = 0; A < EcgTable[0].Count; A++)
//{
// list3.Add(EcgTable[1][A] - EcgTable[0][A]);//III
// list4.Add(-(EcgTable[1][A] + EcgTable[0][A]) / 2);//avR
// list5.Add(EcgTable[0][A] - EcgTable[1][A] / 2);//avL
// list6.Add(EcgTable[1][A] - EcgTable[0][A] / 2);//avF
//}
//EcgTable2.Add(2, list3);
//EcgTable2.Add(3, list4);
//EcgTable2.Add(4, list5);
//EcgTable2.Add(5, list6);
////把 V1-V6导联 加入字典
//for (int i = 6; i < 12; i++)
// EcgTable2.Add(i, EcgTable[i - 4]);
//Dictionary<int, List<float>> EcgTable3 = new Dictionary<int, List<float>>();
//for (int i = 0; i < EcgTable2.Count; i++)
// EcgTable3.Add(i, baseLineFilter(i, EcgTable2[i]));
//this.samplingRate = 300;
//this.windowSize = 60000;
//List<int> rPosList = DetectRWave(EcgTable3[1].ToArray());
////for (int i = 0; i < 12; i++)
//// EcgTable2[i].RemoveRange(0, 500);
////string[] ecgDataArray = dataStr.Split(' ');//把xml中每一导联的数据 变成数组 然后把数据赋值给 EcgTable 字典中的每一导联
////List<float> ecg_List = new List<float>();
////for (int i = 0; i < ecgDataArray.Length; i++)
//// ecg_List.Add(float.Parse(ecgDataArray[i]));
////for (int i = 0; i < 12; i++)
//// EcgTable.Add(i, ecg_List);
//#endregion
//List<int> leadInfo = new List<int>();
//for (int i = 0; i < 12; i++)
// leadInfo.Add(i);
//EDDN.InitEcgParameter(btmp, 12, EcgTable3, 96, leadInfo);//初始化
//EDDN.Draw_EcgBackGroundGrid();//画背景网格
//EDDN.Draw_EcgWave();//画波形
//EDDN.Draw_CalibrationVoltage_And_LeadName();//画定标电压和导联名称
// EDDN.drawRWavePos(rPosList);//绘制R波位置
}
private void groupBox2_Enter(object sender, EventArgs e)
{
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
short byteToShort(byte a, byte b)
{
short volV = (short)((a << 8) + b);//正确
return (short)(volV / 45);
}
private void pictureBox1_DoubleClick(object sender, EventArgs e)
{
}
List<float> baseLineFilter(int leadIndex, List<float> inputDatas)
{
List<float> outPutDatas = new List<float>();
float sum = 0;
for (int i = 0; i < inputDatas.Count; i++)
sum += inputDatas[i];
float avgVal = sum / inputDatas.Count;
for (int i = 0; i < inputDatas.Count; i++)
outPutDatas.Add(inputDatas[i] - avgVal);
if (leadIndex == 1)
{
float sum2 = 0;
int indexCount = 0;
for (int i = 0; i < outPutDatas.Count; i++)
{
if (outPutDatas[i] > 0)
{
sum2 += outPutDatas[i];
indexCount++;
}
}
float avgVal1 = sum2 / indexCount;
threshold = avgVal1 + 130;
}
return outPutDatas;
}
private int samplingRate;
private int windowSize;
private double threshold;
public List<int> DetectRWave(float[] ecg_data)
{
List<int> rWaveIndices = new List<int>(); int maxIndex = 0;
// R波识别
int r_wave_count = 0;
for (int i = 1; i < ecg_data.Length; i++)
{
if (ecg_data[i] > ecg_data[i - 1] && ecg_data[i] > ecg_data[i + 1] && ecg_data[i] > threshold)
{
if (!rWaveIndices.Contains(i))
rWaveIndices.Add(i);
}
}
return rWaveIndices;
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
GetEcgViewDataImage(null, "这是地址"); //普通打印
}
float[] valueConvert(float[] valueArray)
{
float[] quotients = valueArray.Select(n => n / 500).ToArray();
return quotients;
}
private string _printFilter = "0Hz";
private Bitmap _ecgBitMap;
private static int _printDpi = 300;//打印DPI
private const int Dpi = 96; //屏幕DIP
private readonly string _isQiBo;//是否是起搏信号
private int _leadindexdata;
private const string LeaderName15 = "5x3+1导报告模式";
private const string LeaderName18 = "18导报告模式";
private string _reportTitleContent = string.Empty;
private string _idStr;
private string collectTime;//心电数据采集时间
private const double Coefficient = 1.02; //放大缩小的系数
private List<int> _longLeadInfo = new List<int>(); //存储任意长两导联的导联下标
private readonly List<int> _longLeadInfo3 = new List<int>(); //存储任意长三导联的导联下标
public string LeaderType; //导联类别
private Dictionary<int, List<float>> _ecgDataDicAfterFilter = new Dictionary<int, List<float>>(); //滤波后的数据都存在这个字典中
private int _filterIndex; //滤波时 此标志 指示从数组中 哪一个位置开始滤波
/// <summary>
/// 获得心电诊断快照数据
/// </summary>
public void GetEcgViewDataImage(Image img, string addr)
{
_ecgDataDicAfterFilter.Clear();
string ecgDataJsonStr = File.ReadAllText(Application.StartupPath + @"\60心拍心电图数据JSON.txt");
leadDataModel LDM = JsonConvert.DeserializeObject<leadDataModel>(ecgDataJsonStr);
float[] LEAD_I = valueConvert(Array.ConvertAll(LDM.LEAD_I.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(0, LEAD_I.ToList());
float[] LEAD_II = valueConvert(Array.ConvertAll(LDM.LEAD_II.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(1, LEAD_II.ToList());
float[] LEAD_III = valueConvert(Array.ConvertAll(LDM.LEAD_III.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(2, LEAD_III.ToList());
float[] LEAD_AVR = valueConvert(Array.ConvertAll(LDM.LEAD_AVR.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(3, LEAD_AVR.ToList());
float[] LEAD_AVL = valueConvert(Array.ConvertAll(LDM.LEAD_AVL.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(4, LEAD_AVL.ToList());
float[] LEAD_AVF = valueConvert(Array.ConvertAll(LDM.LEAD_AVF.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(5, LEAD_AVF.ToList());
float[] LEAD_V1 = valueConvert(Array.ConvertAll(LDM.LEAD_V1.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(6, LEAD_V1.ToList());
float[] LEAD_V2 = valueConvert(Array.ConvertAll(LDM.LEAD_V2.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(7, LEAD_V2.ToList());
float[] LEAD_V3 = valueConvert(Array.ConvertAll(LDM.LEAD_V3.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(8, LEAD_V3.ToList());
float[] LEAD_V4 = valueConvert(Array.ConvertAll(LDM.LEAD_V4.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(9, LEAD_V4.ToList());
float[] LEAD_V5 = valueConvert(Array.ConvertAll(LDM.LEAD_V5.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(10, LEAD_V5.ToList());
float[] LEAD_V6 = valueConvert(Array.ConvertAll(LDM.LEAD_V6.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(11, LEAD_V6.ToList());
_reportTitleContent = "十二导联静态心电图报告";
_idStr = "5566778899";
collectTime = "2024-12-20 13:28:51";
//长两导的模式下 默认添加 第一导 和 第二导联 为 长显示两导联
_longLeadInfo.Add(0);
_longLeadInfo.Add(1);
//长三导的模式下 默认添加 第一导 和 第二导联和第三导联 为 长显示三导联
_longLeadInfo3.Add(0);
_longLeadInfo3.Add(1);
_longLeadInfo3.Add(2);
var cpew = new CommonPrintEcgWave();
var filter = _printFilter;
_ecgBitMap = new Bitmap(1090 * _printDpi / Dpi, 760 * _printDpi / Dpi);
_ecgBitMap.SetResolution(_printDpi, _printDpi);
cpew.InitEcgParameter(_ecgBitMap, _ecgDataDicAfterFilter, _isQiBo, _paperSpeed, _amplitude);
//************************************************************************
var ecgInfoList = new string[13];
ecgInfoList[0] = "张三";
ecgInfoList[1] = "女";
ecgInfoList[2] = "28";
ecgInfoList[3] = "RV5+SV1";
ecgInfoList[4] = "PR间期";
ecgInfoList[5] = "QRS间期";
ecgInfoList[6] = "QT/QTC";
ecgInfoList[7] = "QRS电轴";
ecgInfoList[8] = "RV5/SV1";
ecgInfoList[9] = "心率";
ecgInfoList[10] = "病室";
ecgInfoList[11] = "床号";
ecgInfoList[12] = "住院号";
SetAandP(); //设置增益和走速
var diagContent = "这里是心电图的诊断结论";
var diagArray = diagContent.Split('\n');
diagContent = string.Empty;
for (var i = 0; i < diagArray.Length; i++) diagContent += diagArray[i].Trim();
if (_ecgDataDicAfterFilter.Count > 0)
_filterIndex = 0;
else
_filterIndex = 0;
// _leadindexdata = hScrollBar_Lead.Value * _filterIndex;
_leadindexdata = _filterIndex;
if (combo_reportModel.Text == LeaderName15) filter += " 十五加一长导模式";
if (combo_reportModel.Text == LeaderName18) filter += " 十八导模式";
if (combo_reportModel.SelectedIndex == 2)
{
cpew.PrintBackGroundGrid(16, 196);
cpew.PrintLongReportHeadInfo(_reportTitleContent);
cpew.PrintLongEcgInfo(ecgInfoList, _idStr);
cpew.PrintLongDiagInfo(diagContent, "医生姓名",
"2024-12-20", filter,
collectTime, "心电图科", _amp, _ps, img, addr);
}
else
{
cpew.PrintBackGroundGrid(40, 196); //(197-42)*12=1860像素
cpew.PrintReportHeadInfo(_reportTitleContent, "2024-12-20");
cpew.PrintEcgInfo(ecgInfoList, _idStr);
cpew.PrintDiagInfo(diagContent, "医生姓名", filter,
collectTime, "心电图科", _amp, _ps, img, addr);
}
//6x2
if (combo_reportModel.SelectedIndex == 0)
{
cpew.PrintEcgWave(8, 1, _leadindexdata);
cpew.PrintEcgLeadName(_calibrationVoltage * Coefficient);
}
//6x2+2
if (combo_reportModel.SelectedIndex == 1)
{
cpew.PrintEcgWave(8, 1, _longLeadInfo, _leadindexdata, _leadindexdata);
cpew.PrintEcgLeadName(_calibrationVoltage * Coefficient, _longLeadInfo);
}
//十二长导
if (combo_reportModel.SelectedIndex == 2)
{
cpew.PrintLongEcgWave(5, 1, _leadindexdata);
//cpew.PrintLongEcgWave(8, 1, _leadindexdata);
cpew.PrintLongEcgLeadName(_calibrationVoltage * Coefficient);
}
//4*3 II长导模式
if (combo_reportModel.SelectedIndex == 3)
{
cpew.PrintEcgWaveFourOne(8, 1, _leadindexdata, _leadindexdata);
cpew.PrintLeadNameFourOne(_calibrationVoltage * Coefficient, _longLeadInfo);
}
//4*3+3 长导模式
if (combo_reportModel.SelectedIndex == 4)
{
cpew.PrintEcgWaveFourThree(8, 1, _longLeadInfo3, _leadindexdata, _leadindexdata);
cpew.PrintLeadNameFourThree(_calibrationVoltage * Coefficient, _longLeadInfo3);
}
//15x1+1导
if (combo_reportModel.Text.Trim() == LeaderName15)
{
cpew.PrintEcgWaveFifteen(8, 1, _leadindexdata);
cpew.PrintLeadNameFifteen(_calibrationVoltage * Coefficient, LeaderType);
}
//十八导
if (combo_reportModel.Text.Trim() == LeaderName18)
{
cpew.PrintEcgWaveEighteen(8, 1, _leadindexdata);
cpew.PrintLeadNameEighteen(_calibrationVoltage * Coefficient);
}
//_sourceCegBmp = _ecgBitMap;
_ecgBitMap.Save("1.jpg", ImageFormat.Jpeg);
}
private double _paperSpeed = 25.0; //走速
private string _ps = "25mm/s"; //打印时的走速
private double _amplitude = 10.0; //振幅
private string _amp = "10mm/mV"; //打印时的振幅
private double _calibrationVoltage = 2.0;//定标电压
/// <summary>
/// 设置增益和走速和定标电压
/// </summary>
private void SetAandP()
{
if (cBoxSpeed.SelectedIndex == 0) //走速
{
_paperSpeed = 5;
_ps = "5mm/s";
}
if (cBoxSpeed.SelectedIndex == 1)
{
_paperSpeed = 10;
_ps = "10mm/s";
}
if (cBoxSpeed.SelectedIndex == 2) //走速
{
_paperSpeed = 12.5;
_ps = "12.5mm/s";
}
if (cBoxSpeed.SelectedIndex == 3)
{
_paperSpeed = 25.0;
_ps = "25mm/s";
}
if (cBoxSpeed.SelectedIndex == 4)
{
_paperSpeed = 50.0;
_ps = "50mm/s";
}
if (cBoxAmplitude.SelectedIndex == 0) //振幅
{
_amplitude = 2.5;
_amp = "2.5mm/mV";
_calibrationVoltage = 0.5;
}
if (cBoxAmplitude.SelectedIndex == 1)
{
_amplitude = 5.0;
_amp = "5mm/mV";
_calibrationVoltage = 1.0;
}
if (cBoxAmplitude.SelectedIndex == 2)
{
_amplitude = 10.0;
_amp = "10mm/mV";
_calibrationVoltage = 2.0;
}
if (cBoxAmplitude.SelectedIndex == 3)
{
_amplitude = 20.0;
_amp = "20mm/mV";
_calibrationVoltage = 4.0;
}
if (cBoxAmplitude.SelectedIndex == 4)
{
_amplitude = 40.0;
_amp = "40mm/mV";
_calibrationVoltage = 8.0;
}
}
/// <summary>
/// 开启服务
/// </summary>
private void Start()
{
server.SetRoot(AppDomain.CurrentDomain.BaseDirectory);
server.Logger = new ConsoleLogger(txt_msg);
server.Start();
}
#region
private void combo_reportModel_SelectedIndexChanged(object sender, EventArgs e)
{
server.reportMode = combo_reportModel.SelectedIndex;
server.strreportMode = combo_reportModel.Text.Trim();
}
private void cBoxSpeed_SelectedIndexChanged(object sender, EventArgs e)
{
server.cBoxSpeed = cBoxSpeed.SelectedIndex;
}
private void cBoxAmplitude_SelectedIndexChanged(object sender, EventArgs e)
{
server.cBoxAmplitude = cBoxAmplitude.SelectedIndex;
}
#endregion
private void Form3_FormClosed(object sender, FormClosedEventArgs e)
{
server.Stop();
}
}
}

View File

@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>62</value>
</metadata>
</root>

View File

@ -0,0 +1,266 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace _1200Gxml心电图绘制
{
public class FtpHelper
{
//基本设置
//private static string ftppath = @"ftp://" + "10.13.1.36" + "/";
private static string ftppath = ConfigurationManager.AppSettings["ftppath"];
private static string username = ConfigurationManager.AppSettings["username"];
private static string password = ConfigurationManager.AppSettings["password"];
//获取FTP上面的文件夹和文件
public static string[] GetFolderAndFileList(string s)
{
string[] getfolderandfilelist;
FtpWebRequest request;
StringBuilder sb = new StringBuilder();
try
{
request = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftppath));
request.UseBinary = true;
request.Credentials = new NetworkCredential(username, password);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.UseBinary = true;
WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string line = reader.ReadLine();
while (line != null)
{
sb.Append(line);
sb.Append("\n");
Console.WriteLine(line);
line = reader.ReadLine();
}
sb.Remove(sb.ToString().LastIndexOf('\n'), 1);
reader.Close();
response.Close();
return sb.ToString().Split('\n');
}
catch (Exception ex)
{
Console.WriteLine("获取FTP上面的文件夹和文件" + ex.Message);
getfolderandfilelist = null;
return getfolderandfilelist;
}
}
//获取FTP上面的文件大小
public static int GetFileSize(string fileName)
{
FtpWebRequest request;
try
{
request = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftppath + fileName));
request.UseBinary = true;
request.Credentials = new NetworkCredential(username, password);
request.Method = WebRequestMethods.Ftp.GetFileSize;
int n = (int)request.GetResponse().ContentLength;
return n;
}
catch (Exception ex)
{
Console.WriteLine("获取FTP上面的文件大小" + ex.Message);
return -1;
}
}
//FTP上传文件
public static string FileUpLoad(string filePath, string objPath = "")
{
try
{
string url = ftppath;
if (objPath != "")
url += objPath + "/";
try
{
FtpWebRequest request = null;
try
{
FileInfo fi = new FileInfo(filePath);
using (FileStream fs = fi.OpenRead())
{
request = (FtpWebRequest)FtpWebRequest.Create(new Uri(url + fi.Name));
request.Credentials = new NetworkCredential(username, password);
request.KeepAlive = false;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.UseBinary = true;
using (Stream stream = request.GetRequestStream())
{
int bufferLength = 5120;
byte[] buffer = new byte[bufferLength];
int i;
while ((i = fs.Read(buffer, 0, bufferLength)) > 0)
{
stream.Write(buffer, 0, i);
}
return "上传成功";
}
}
}
catch (Exception ex)
{
return ex.ToString();
}
finally
{
}
}
catch (Exception ex)
{
return ex.ToString();
}
finally
{
}
}
catch (Exception ex)
{
return ex.ToString();
}
}
//FTP上传文件
public static string FileUpLoad(string filePath, string objPath ,string ftpFileName)
{
try
{
string url = ftppath;
if (objPath != "")
url += objPath + "/";
FtpWebRequest request = null;
FileInfo fi = new FileInfo(filePath);
using (FileStream fs = fi.OpenRead())
{
request = (FtpWebRequest)FtpWebRequest.Create(new Uri(url + ftpFileName));
request.Credentials = new NetworkCredential(username, password);
request.KeepAlive = false;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.UseBinary = true;
request.UsePassive = false;//被动传输模式 设置
using (Stream stream = request.GetRequestStream())
{
int bufferLength = 5120;
byte[] buffer = new byte[bufferLength];
int i;
while ((i = fs.Read(buffer, 0, bufferLength)) > 0)
{
stream.Write(buffer, 0, i);
}
return "上传成功";
}
}
}
catch (Exception ex)
{
return ex.ToString();
}
}
//FTP下载文件
public static void FileDownLoad(string fileName)
{
FtpWebRequest request;
try
{
string downloadPath = @"D:";
FileStream fs = new FileStream(downloadPath + "\\" + fileName, FileMode.Create);
request = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftppath + fileName));
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.UseBinary = true;
request.Credentials = new NetworkCredential(username, password);
request.UsePassive = false;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
int bufferLength = 5120;
int i;
byte[] buffer = new byte[bufferLength];
i = stream.Read(buffer, 0, bufferLength);
while (i > 0)
{
fs.Write(buffer, 0, i);
i = stream.Read(buffer, 0, bufferLength);
}
stream.Close();
fs.Close();
response.Close();
}
catch (Exception ex)
{
Console.WriteLine("FTP下载文件" + ex.Message);
}
}
//FTP删除文件
public static void FileDelete(string fileName)
{
try
{
string uri = ftppath + fileName;
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
request.UseBinary = true;
request.Credentials = new NetworkCredential(username, password);
request.KeepAlive = false;
request.Method = WebRequestMethods.Ftp.DeleteFile;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
response.Close();
}
catch (Exception ex)
{
Console.WriteLine("FTP删除文件" + ex.Message);
}
}
//FTP新建目录上一级须先存在
public static void MakeDir(string dirName)
{
try
{
string uri = ftppath + dirName;
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
request.UseBinary = true;
request.Credentials = new NetworkCredential(username, password);
request.Method = WebRequestMethods.Ftp.MakeDirectory;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
response.Close();
}
catch (Exception ex)
{
Console.WriteLine("FTP新建目录" + ex.Message);
}
}
//FTP删除目录上一级须先存在
public static void DelDir(string dirName)
{
try
{
string uri = ftppath + dirName;
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
reqFTP.Credentials = new NetworkCredential(username, password);
reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
response.Close();
}
catch (Exception ex)
{
Console.WriteLine("FTP删除目录" + ex.Message);
}
}
}
}

View File

@ -0,0 +1,22 @@
using System.Collections.Generic;
using System.Resources;
namespace _1200Gxml心电图绘制
{
public class LocalStorage
{
/// <summary>
/// 翻译支持的语言
/// </summary>
public static Dictionary<string, string> DClanguage = new Dictionary<string, string>();
/// <summary>
/// 当前语言
/// </summary>
public static string CurrentLanguage = "zh-CN";
/// <summary>
/// 语言资源管理器
/// </summary>
public static ResourceManager ResManager;
}
}

View File

@ -0,0 +1,22 @@
namespace _1200Gxml心电图绘制
{
public class CbItemObj
{
/// <summary>
/// 显示
/// </summary>
public string Display { get; set; }
/// <summary>
/// 值
/// </summary>
public string Value { get; set; }
}
public class Msg
{
public bool IsOk { get; set; }
public string Content { get; set; }
}
}

View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace _1200Gxml心电图绘制
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form3());
}
}
}

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("1200Gxml心电图绘制")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("1200Gxml心电图绘制")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//将 ComVisible 设置为 false 将使此程序集中的类型
//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型,
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("3eba2f41-db73-407d-95d6-06293096f945")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace .Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("心电图绘制.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace .Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@ -0,0 +1,204 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace _1200Gxml心电图绘制
{
public class SqliteOptions_sql
{
public SqlConnection sqliteConn = null;
/// <summary>
/// 让此类创建一个单例类
/// </summary>
public static SqliteOptions_sql _instance = null;//申明一个EcgDrawing对象复制Null
private static readonly object lockHelper = new object();
public static SqliteOptions_sql CreateInstance()
{
if (_instance == null)
{
lock (lockHelper)
{
if (_instance == null)
_instance = new SqliteOptions_sql();
}
}
return _instance;
}
public SqliteOptions_sql()
{
GetSqliteConnection();
}
/// <summary>
/// 获得sqlite数据库连接
/// </summary>
/// <param name="dbpath"></param>
/// <returns></returns>
public bool GetSqliteConnection()
{
try
{
//给数据库连接类赋值
string ConnectionStr = File.ReadAllText(Application.StartupPath+ @"\conn.dll");
//string ConnectionStr = "server='rds75123g9jf9kk05833public.sqlserver.rds.aliyuncs.com,3433';database='ainia_holter_test';uid='ainia_test';pwd='ain4nhcEqV3gkAP7';";
SqlConnection Conn = new SqlConnection(ConnectionStr);
sqliteConn = Conn;
}
catch { return false; }
return true;
}
/// <summary>
/// 执行sqlite查询语句并返回一个 DataTable
/// </summary>
/// <param name="sqliteStr"></param>
/// <returns></returns>
public DataTable ExcuteSqlite(string sqliteStr)
{
SqlDataAdapter sqliteDp = new SqlDataAdapter(sqliteStr, sqliteConn);
DataSet sqliteds = new DataSet();
try
{
//if (sqliteConn.State == ConnectionState.Open)
// sqliteConn.Close();
sqliteDp.SelectCommand.CommandTimeout = 600000;
sqliteDp.Fill(sqliteds);
return sqliteds.Tables[0];
}
catch { }
return new DataTable();
}
/// <summary>
/// Sqlite 添加数据的操作函数
/// </summary>
/// <param name="sqliteSQL"></param>
/// <returns></returns>
public bool SqliteAdd(string sqliteSQL)
{
try
{
if (sqliteConn.State == ConnectionState.Closed)
sqliteConn.Open();
SqlCommand sqliteCmd = new SqlCommand(sqliteSQL, sqliteConn);
sqliteCmd.ExecuteNonQuery();
sqliteCmd.Dispose();
sqliteConn.Close();
}
catch { return false; }
return true;
}
/// <summary>
/// Sqlite 删除数据的操作函数
/// </summary>
/// <param name="sqliteSQL"></param>
/// <returns></returns>
public bool SqliteDelete(string sqliteSQL)
{
try
{
if (sqliteConn.State == ConnectionState.Closed)
sqliteConn.Open();
SqlCommand sqliteCmd = new SqlCommand(sqliteSQL, sqliteConn);
sqliteCmd.CommandTimeout = 3600;
sqliteCmd.ExecuteNonQuery();
sqliteCmd.Dispose();
sqliteConn.Close();
}
catch { return false; }
return true;
}
/// <summary>
/// Sqlite 更新数据的操作函数
/// </summary>
/// <param name="sqliteSQL"></param>
/// <returns></returns>
public bool SqliteUpdate(string sqliteSQL)
{
try
{
if (sqliteConn.State == ConnectionState.Closed)
sqliteConn.Open();
SqlCommand sqliteCmd = new SqlCommand(sqliteSQL, sqliteConn);
sqliteCmd.ExecuteNonQuery();
sqliteCmd.Dispose();
sqliteConn.Close();
}
catch { return false; }
return true;
}
/// <summary>
/// 执行SQL语句函数
/// </summary>
/// <param name="sqlcmd">SQL语句</param>
/// <param name="paras">SQL语句中的参数组</param>
/// <returns>返回受影响记录条数</returns>
public int ExecuteSql(string sqlcmd, params SqlParameter[] paras)
{
SqlCommand cmd = new SqlCommand(sqlcmd, sqliteConn);
if (sqliteConn.State == ConnectionState.Closed)
{
sqliteConn.Open();
}
foreach (SqlParameter p in paras)
{
cmd.Parameters.Add(p);
}
int cnt = cmd.ExecuteNonQuery();
sqliteConn.Close();
return cnt;
}
/// <summary>
/// Sqlite 执行数据库的多条语句,
/// </summary>
/// <param name="sqliteSQL"></param>
/// <returns></returns>
public bool SqliteExecuteNonQuery(string[] sqliteSQL)
{
if (sqliteConn.State == ConnectionState.Closed)
{
sqliteConn.Open();
}
SqlTransaction sqlTran = sqliteConn.BeginTransaction();
try
{
foreach (string sql in sqliteSQL)
{
SqlCommand sqliteCmd = new SqlCommand(sql, sqliteConn, sqlTran);
sqliteCmd.ExecuteNonQuery();
sqliteCmd.Dispose();
}
sqlTran.Commit();
}
catch
{
sqlTran.Rollback();
return false;
}
finally
{
sqliteConn.Close();
}
return true;
}
}
}

View File

@ -0,0 +1,76 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace _1200Gxml心电图绘制
{
public class ecgMeasure
{
//画垂直的 和水平的线
public void Draw_Measure(Bitmap bit, Point p1, Point p2)
{
Graphics gg = Graphics.FromImage(bit);
Pen pp = new Pen(Color.Blue, float.Parse("1"));
Pen pp1 = new Pen(Color.Blue, float.Parse("1"));
//画水平线
gg.DrawLine(pp, new Point(p1.X,0), new Point(p1.X, bit.Height));
gg.DrawLine(pp1, p1, p2);
gg.DrawLine(pp1, p1.X, p1.Y, p1.X, p1.Y - 3);
gg.DrawLine(pp1, p2.X, p2.Y, p2.X, p2.Y - 3);
gg.DrawLine(pp, new Point(p2.X, 0), new Point(p2.X, bit.Height));
double ecgValue = ((double.Parse((p2.X - p1.X).ToString()) / (96 / 25.4)) / 25) * 1000;
string heartRate = ((int)60000 / ecgValue).ToString("0.0");
if (ecgValue > 0)
Draw_Rectangular_And_Text(bit, p2.X, p2.Y, ((int)ecgValue).ToString() + " 毫秒,心率:"+ heartRate);
//Graphics gg = Graphics.FromImage(bit);
//Pen pp = new Pen(Color.Blue, float.Parse("3"));
////画水平线
//gg.DrawLine(pp, p1, p2);
//gg.DrawLine(pp, p1.X, p1.Y, p1.X, p1.Y - 3);
//gg.DrawLine(pp, p2.X, p2.Y, p2.X, p2.Y - 3);
//double ecgValue=((double.Parse((p2.X - p1.X).ToString())/(96/25.4))/25)*1000;
//Draw_Rectangular_And_Text(bit, p2.X, p2.Y, ((int)ecgValue).ToString() + " 毫秒");
}
//垂直的线
public void Draw_V_Measure(Bitmap bit, Point p1, Point p2)
{
Graphics gg = Graphics.FromImage(bit);
Pen pp = new Pen(Color.Red, float.Parse("1"));
//画水平线
//gg.DrawLine(pp, p1, p2);
gg.DrawLine(pp, p1.X - 10, p1.Y, p2.X - 10, p2.Y);
gg.DrawLine(pp, 0, p1.Y, bit.Width , p1.Y);
gg.DrawLine(pp, 0, p2.Y, bit.Width, p2.Y);
//gg.DrawLine(pp, p1.X - 10, p1.Y, p2.X - 10, p2.Y);
//gg.DrawLine(pp, p1.X - 10, p1.Y, p1.X + 30, p1.Y);
//gg.DrawLine(pp, p2.X - 10, p2.Y, p2.X + 30, p2.Y);
double ecgMV = ((double.Parse((p2.Y - p1.Y).ToString()) / ((96 / 25.4) * 10)));
if (ecgMV < 0)
ecgMV = -ecgMV;
if (p1.Y < p2.Y)
Draw_Rectangular_And_Text(bit, p1.X + 10, p1.Y, ecgMV.ToString("0.000") + " mv");
else
Draw_Rectangular_And_Text(bit, p2.X + 10, p2.Y, ecgMV.ToString("0.000") + " mv");
}
//画矩形和文字
public void Draw_Rectangular_And_Text(Bitmap bit, int x, int y, string Text)
{
//画垂直线
Graphics gg = Graphics.FromImage(bit);
Font font = new Font("宋体", 15,FontStyle.Bold); //字体
Brush brush = Brushes.Red; //字体颜色;
PointF point = new PointF(x, y); //写字的起始位置
gg.DrawString(Text, font, brush, point);
}
}
}

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace
{
public class leadDataModel
{
public string LEAD_I { get; set; }// I导联
public string LEAD_II { get; set; }// II导联
public string LEAD_III { get; set; }// III导联
public string LEAD_AVR { get; set; }// AVR导联
public string LEAD_AVL { get; set; }// AVL导联
public string LEAD_AVF { get; set; }// AVF导联
public string LEAD_V1 { get; set; }// V1导联
public string LEAD_V2 { get; set; }// V2导联
public string LEAD_V3 { get; set; }// V3导联
public string LEAD_V4 { get; set; }// V4导联
public string LEAD_V5 { get; set; }// V5导联
public string LEAD_V6 { get; set; }// V6导联
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="iTextSharp" version="5.5.5" targetFramework="net48" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net48" />
</packages>

View File

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{3EBA2F41-DB73-407D-95D6-06293096F945}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>心电图绘制</RootNamespace>
<AssemblyName>心电图打印服务</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>o23www.qsheal.com.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="HttpServerLib, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>bin\Debug\HttpServerLib.dll</HintPath>
</Reference>
<Reference Include="itextsharp, Version=5.5.5.0, Culture=neutral, PublicKeyToken=8354ae6d2174ddca, processorArchitecture=MSIL">
<HintPath>..\packages\iTextSharp.5.5.5\lib\itextsharp.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CommonPrintEcgWave.cs" />
<Compile Include="CommonVerifyUrlResult.cs" />
<Compile Include="ConfigHelper.cs" />
<Compile Include="DESEncrypt.cs" />
<Compile Include="EcgDataDraw_New.cs" />
<Compile Include="ecgMeasure.cs" />
<Compile Include="Form3.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form3.Designer.cs">
<DependentUpon>Form3.cs</DependentUpon>
</Compile>
<Compile Include="FtpHelper.cs" />
<Compile Include="leadDataModel.cs" />
<Compile Include="LocalStorage.cs" />
<Compile Include="Msg.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SqliteOptions.cs" />
<Compile Include="服务\ConsoleLogger.cs" />
<Compile Include="服务\ExampleServer.cs" />
<Compile Include="服务\LogHelper.cs" />
<Compile Include="服务\PatientInfo.cs" />
<Compile Include="服务\print.cs" />
<Compile Include="服务\UniversalFun.cs" />
<EmbeddedResource Include="Form3.resx">
<DependentUpon>Form3.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="App.config" />
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<Content Include="o23www.qsheal.com.ico" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using HTTPServerLib;
namespace _1200Gxml心电图绘制
{
public class ConsoleLogger:ILogger
{
private Control _logControl; // 假设你有一个用于显示日志的Control
private const int MaxLogLength = 10000; // 设置最大日志长度
public ConsoleLogger(Control logControl)
{
_logControl = logControl;
}
public void Log(object message)
{
try
{
// 是否进行书写日志
if (ConfigurationManager.AppSettings["log"] == "1")
{
if (_logControl.InvokeRequired)
{
_logControl.Invoke(new Action<object>(Log), message);
}
else
{
// 检查日志内容是否超过最大长度
if (_logControl.Text.Length + message.ToString().Length + Environment.NewLine.Length > MaxLogLength)
{
// 清空日志控件
_logControl.Text = string.Empty;
}
// 将日志信息添加到Control中例如TextBox或RichTextBox
_logControl.Text += message + Environment.NewLine;
}
}
}
catch (Exception ex)
{
}
}
}
}

View File

@ -0,0 +1,274 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HTTPServerLib;
using System.IO;
using System.Xml;
using System.Windows.Forms;
using System.Reflection.Emit;
using ;
using Newtonsoft.Json;
using .Properties;
using ;
using System.Drawing;
namespace _1200Gxml心电图绘制
{
public class ExampleServer : HTTPServerLib.HttpServer
{
private Control _logControl;
ConsoleLogger logger;
print print = new print();
/// <summary>
/// 报告样式类型
/// </summary>
public int reportMode;
/// <summary>
/// 报告样式类型名称
/// </summary>
public string strreportMode = string.Empty;
/// <summary>
/// 走速
/// </summary>
public int cBoxSpeed = 0;
/// <summary>
/// 振幅
/// </summary>
public int cBoxAmplitude = 0;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="ipAddress">IP地址</param>
/// <param name="port">端口号</param>
public ExampleServer(string ipAddress, int port, Control _logControl)
: base(ipAddress, port)
{
logger = new ConsoleLogger(_logControl);
}
public override void OnPost(HttpRequest request, HttpResponse response)
{
//获取客户端传递的参数
// string data = request.Params == null ? "" : string.Join(";", request.Params.Select(x => x.Key + "=" + x.Value).ToArray());
string strMQName = string.Empty;
LogHelper.Info("接收到请求", "");
string data = "";
try
{
if (request != null && request.Params != null)
{
if (request.URL.Contains("printecg"))
{
string[] array = request.Params.Select(x => x.Value).ToArray();
if (array.Length > 0)
{
LogHelper.Info("请求参数", array[0]);
PatientInfo patientInfo = JsonConvert.DeserializeObject<PatientInfo>(array[0]);
print.cBoxSpeed = cBoxSpeed;
print.cBoxAmplitude = cBoxAmplitude;
print.strreportMode = strreportMode;
print.reportMode = reportMode;
if (patientInfo != null)
{
if (!string.IsNullOrEmpty(patientInfo.filepath))
{
Log("开始处理请求:" + patientInfo.regid);
Image image = null;
if (!string.IsNullOrEmpty(patientInfo.image))
{
image = UniversalFun.ConvertFromBase64String(patientInfo.image);
}
string ecgDataJsonStr = UniversalFun.GetTextFileContent(patientInfo.filepath);
print.GetEcgViewDataImage(image, "", patientInfo, patientInfo.type, ecgDataJsonStr);
if (patientInfo.type == 1)
{
data = print.imagebase;
}
else
{
data = print.filename;
}
Log("请求处理完成:" + patientInfo.regid);
}
else
{
data = "心电数据为空";
}
}
else
{
data = "解析数据不正确";
}
}
}
else
{
data = "非指定请求方法";
}
}
else
{
data = "请求参数为空";
}
}
catch (Exception e)
{
LogHelper.Info("OnPost Error:", e.Message);
}
//设置返回信息
string content = data; //string.Format("<vtma><result>0000</result><desc>Successful!</desc><data><outputXml>{0}</outputXml></data></vtma>", data);
//构造响应报文
response.SetContent(content);
response.Content_Encoding = "utf-8";
response.StatusCode = "200";
response.Content_Type = "application/json; charset=UTF-8";
response.Server = "ExampleServer";
// LogHelper.Info("返回值:" ,content);
//发送响应
response.Send();
}
public override void OnGet(HttpRequest request, HttpResponse response)
{
LogHelper.Info("请求到接口", "");
//当文件不存在时应返回404状态码
string requestURL = request.URL;
requestURL = requestURL.Replace("/", @"\").Replace("\\..", "").TrimStart('\\');
/*
string requestFile = Path.Combine(ServerRoot, requestURL);
//根据不同业务进行修改
//判断地址中是否存在扩展名
string extension = Path.GetExtension(requestFile);
//根据有无扩展名按照两种不同链接进行处
if (extension != "")
{
//从文件中返回HTTP响应
response = LoadFromFile(response, requestFile);
}
else
{
//目录存在且不存在index页面时时列举目录
if (Directory.Exists(requestFile) && !File.Exists(requestFile + "\\index.html"))
{
requestFile = Path.Combine(ServerRoot, requestFile);
var content = ListDirectory(requestFile, requestURL);
response = response.SetContent(content, Encoding.UTF8);
response.Content_Type = "text/html; charset=UTF-8";
}
else
{
//加载静态HTML页面
requestFile = Path.Combine(requestFile, "index.html");
response = LoadFromFile(response, requestFile);
response.Content_Type = "text/html; charset=UTF-8";
}
}
*/
//发送HTTP响应
StringBuilder sb = new StringBuilder();
sb.Append("接收到接口数据");
response.SetContent(sb.ToString());
response.StatusCode = "200";
response.Content_Type = "text/html";
response.Server = "ExampleServer";
response.Send();
}
public override void OnDefault(HttpRequest request, HttpResponse response)
{
}
private async void GetFilePathUrl(string filepath)
{
}
/// <summary>
/// 从文件返回一个HTTP响应
/// </summary>
/// <param name="fileName">文件名</param>
private HttpResponse LoadFromFile(HttpResponse response, string fileName)
{
//获取文件扩展名以判断内容类型
string extension = Path.GetExtension(fileName);
//获取当前内容类型
string contentType = GetContentType(extension);
//如果文件不存在则返回404否则读取文件内容
if (!File.Exists(fileName))
{
response.SetContent("<html><body><h1>404 - Not Found</h1></body></html>");
response.StatusCode = "404";
response.Content_Type = "text/html";
response.Server = "ExampleServer";
}
else
{
response.SetContent(File.ReadAllBytes(fileName));
response.StatusCode = "200";
response.Content_Type = contentType;
response.Server = "ExampleServer";
}
//返回数据
return response;
}
private string ConvertPath(string[] urls)
{
string html = string.Empty;
int length = ServerRoot.Length;
foreach (var url in urls)
{
var s = url.StartsWith("..") ? url : url.Substring(length).TrimEnd('\\');
html += String.Format("<li><a href=\"{0}\">{0}</a></li>", s);
}
return html;
}
private string ListDirectory(string requestDirectory, string requestURL)
{
//列举子目录
var folders = requestURL.Length > 1 ? new string[] { "../" } : new string[] { };
folders = folders.Concat(Directory.GetDirectories(requestDirectory)).ToArray();
var foldersList = ConvertPath(folders);
//列举文件
var files = Directory.GetFiles(requestDirectory);
var filesList = ConvertPath(files);
//构造HTML
StringBuilder builder = new StringBuilder();
builder.Append(string.Format("<html><head><title>{0}</title></head>", requestDirectory));
builder.Append(string.Format("<body><h1>{0}</h1><br/><ul>{1}{2}</ul></body></html>",
requestURL, filesList, foldersList));
return builder.ToString();
}
}
}

View File

@ -0,0 +1,128 @@
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace
{
/// <summary>
/// 日志类
/// </summary>
public sealed class LogHelper
{
public static int level = 3;
public static string path = AppDomain.CurrentDomain.BaseDirectory + "\\Content\\Log\\";
/// <summary>
/// 记录日志
/// </summary>
/// <param name="title"></param>
/// <param name="content"></param>
public static void Info(string title, string content)
{
Task.Factory.StartNew(() =>
{
new LogHelper().Log("info", title, content);
});
}
/// <summary>
/// 记录调试日志
/// </summary>
/// <param name="title"></param>
/// <param name="content"></param>
public static void Debug(string title, string content)
{
Task.Factory.StartNew(() =>
{
new LogHelper().Log("debug", title, content);
});
}
/// <summary>
/// 记录错误日志
/// </summary>
/// <param name="title"></param>
/// <param name="content"></param>
public static void Error(string title, string content)
{
Task.Factory.StartNew(() =>
{
new LogHelper().Log("error", title, content);
});
}
/// <summary>
/// 记录异常日志
/// </summary>
/// <param name="type"></param>
/// <param name="ex"></param>
public static void Error(string type, Exception ex)
{
Task.Factory.StartNew(() =>
{
new LogHelper().Log(type, ex);
});
}
/// <summary>
/// 记录一般日志
/// </summary>
/// <param name="type"></param>
/// <param name="title"></param>
/// <param name="content"></param>
private void Log(string type, string title, string content)
{
string name = string.Concat(DateTime.Now.ToString("yyyyMMdd"), ".TXT");
string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
string write_content = $"[{time}][{type}][{title}][{content}]";
using (FileStream fs = new FileStream(path + name, FileMode.Append, FileAccess.Write))
{
using (StreamWriter w = new StreamWriter(fs, System.Text.Encoding.GetEncoding("utf-8")))
{
w.WriteLine(write_content);
}
}
}
/// <summary>
/// 记录异常错误日志
/// </summary>
/// <param name="type"></param>
/// <param name="ex"></param>
private void Log(string type, Exception ex)
{
string name = string.Concat(DateTime.Now.ToString("yyyyMMdd"), ".error.config");
string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
using (FileStream fs = new FileStream(path + name, FileMode.Append, FileAccess.Write))
{
using (StreamWriter w = new StreamWriter(fs, System.Text.Encoding.GetEncoding("utf-8")))
{
w.WriteLine("------------------------------------------------------------------");
w.WriteLine(string.Concat("[1.位置:", type, "]"));
w.WriteLine(string.Concat("[2.时间:", time, "]"));
w.WriteLine(string.Concat("[4.实例:", ex.InnerException, "]"));
w.WriteLine(string.Concat("[5.来源:", ex.Source, "]"));
w.WriteLine(string.Concat("[6.方法:", ex.TargetSite, "]"));
w.WriteLine(string.Concat("[7.堆栈:", ex.StackTrace, "]"));
w.WriteLine(string.Concat("[8.提示:", ex.Message, "]"));
w.WriteLine("------------------------------------------------------------------");
}
}
}
}
}

View File

@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace
{
internal class PatientInfo
{
public string examid { get; set; }
public string name { get; set; }
public string gender { get; set; }
public int age { get; set; }
public string ward { get; set; }
public string regid { get; set; }
public int hr { get; set; }
public double pr { get; set; }
public string qrs { get; set; }
public string qtqtc { get; set; } // QT/QTC 被转换为 qtqt
public string rv5sv1 { get; set; }
public string rv5sv1plus { get; set; } // RV5+SV1 被转换为 rv5sv1plus
public string pt { get; set; }
public string diagnosishint { get; set; }
public string department { get; set; }
public string image { get; set; }
public string doctorDiagTime { get; set; }
public string diagContent { get; set; }
public string DepartName { get; set; }
public string doctorName { get; set; }
/// <summary>
/// 类型 1是返回base64 2是在指定路径保存pdf
/// </summary>
public int type { get; set; }
public string filepath { get; set; }
public string orgname { get; set; }
}
}

View File

@ -0,0 +1,133 @@
using iTextSharp.text.pdf;
using iTextSharp.text;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using System.Net;
namespace
{
internal class UniversalFun
{
/// <summary>
/// base64转换成图片
/// </summary>
/// <param name="base64String"></param>
/// <returns></returns>
public static System.Drawing.Image ConvertFromBase64String(string base64String)
{
string [] baseary= base64String.Split(',');
if(baseary.Length<2)
{
return null;
}
// 将Base64字符串转换为字节数组
byte[] imageBytes = Convert.FromBase64String(baseary[1]);
// 使用字节数组创建MemoryStream
using (MemoryStream ms = new MemoryStream(imageBytes))
{
// 从MemoryStream中创建Image对象
System.Drawing.Image image = System.Drawing.Image.FromStream(ms);
return image;
}
}
/// <summary>
/// 图片转换成base64
/// </summary>
/// <param name="bitmap"></param>
/// <param name="format"></param>
/// <returns></returns>
public static string ConvertToBase64String(Bitmap bitmap, ImageFormat format)
{
// 将Bitmap保存到MemoryStream中
using (MemoryStream ms = new MemoryStream())
{
bitmap.Save(ms, format); // 可以根据需要选择不同的图片格式例如ImageFormat.Png或ImageFormat.Jpeg
// 将流的位置重置到开始位置
ms.Position = 0;
// 将MemoryStream中的字节数组编码为Base64字符串
byte[] imageBytes = ms.ToArray();
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
/// <summary>
/// 图片转换成PDF
/// </summary>
/// <param name="bitmap"></param>
/// <param name="pdfPath"></param>
public static void ConvertBitmapToPdf(Bitmap bitmap, string pdfPath)
{
string directoryPath = Path.GetDirectoryName(pdfPath);
if (directoryPath != null && !Directory.Exists(directoryPath))
{
Directory.CreateDirectory(directoryPath);
}
// 创建一个文档对象
Document document = new Document();
// 创建一个PdfWriter实例
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(pdfPath, FileMode.Create));
// 打开文档以便添加内容
document.Open();
// 设置页面尺寸与图像尺寸一致
iTextSharp.text.Rectangle pageSize = new iTextSharp.text.Rectangle(bitmap.Width, bitmap.Height+50);
document.SetPageSize(pageSize);
// 将Bitmap转换为iTextSharp的Image对象
iTextSharp.text.Image image = ConvertBitmapToImageSharp(bitmap);
// 将图像添加到文档
document.NewPage();
document.Add(image);
// 关闭文档
document.Close();
}
private static iTextSharp.text.Image ConvertBitmapToImageSharp(Bitmap bitmap)
{
using (MemoryStream ms = new MemoryStream())
{
// 将Bitmap保存到MemoryStream中使用PNG格式
bitmap.Save(ms, ImageFormat.Png);
// 从MemoryStream中创建iTextSharp的Image对象
return iTextSharp.text.Image.GetInstance(new MemoryStream(ms.ToArray()));
}
}
/// <summary>
/// 获取指定 URL 的文本文件内容
/// </summary>
/// <param name="url">文本文件的 URL</param>
/// <returns>返回文件内容的字符串,如果失败则返回 null</returns>
public static string GetTextFileContent(string url)
{
// 忽略 SSL 证书错误
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
using (WebClient client = new WebClient())
{
try
{
// 下载文件内容
return client.DownloadString(url);
}
catch (WebException e)
{
Console.WriteLine("请求错误: " + e.Message);
return null;
}
}
}
}
}

View File

@ -0,0 +1,328 @@
using _1200Gxml心电图绘制;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ;
namespace
{
internal class print
{
/// <summary>
/// 报告样式类型
/// </summary>
public int reportMode = 0;
/// <summary>
/// 报告样式类型名称
/// </summary>
public string strreportMode = string.Empty;
/// <summary>
/// 走速
/// </summary>
public int cBoxSpeed = 0;
/// <summary>
/// 振幅
/// </summary>
public int cBoxAmplitude = 0;
/// <summary>
/// PDF文件名称
/// </summary>
public string filename = string.Empty;
/// <summary>
/// 生成报告base64
/// </summary>
public string imagebase = string.Empty;
private string _printFilter = "0Hz";
private Bitmap _ecgBitMap;
private static int _printDpi = 300;//打印DPI
private const int Dpi = 96; //屏幕DIP
private readonly string _isQiBo;//是否是起搏信号
private int _leadindexdata;
private const string LeaderName15 = "5x3+1导报告模式";
private const string LeaderName18 = "18导报告模式";
private string _reportTitleContent = string.Empty;
private string _idStr;
private string collectTime;//心电数据采集时间
private const double Coefficient = 1.02; //放大缩小的系数
private List<int> _longLeadInfo = new List<int>(); //存储任意长两导联的导联下标
private readonly List<int> _longLeadInfo3 = new List<int>(); //存储任意长三导联的导联下标
public string LeaderType; //导联类别
private Dictionary<int, List<float>> _ecgDataDicAfterFilter = new Dictionary<int, List<float>>(); //滤波后的数据都存在这个字典中
private int _filterIndex; //滤波时 此标志 指示从数组中 哪一个位置开始滤波
private double _paperSpeed = 25.0; //走速
private string _ps = "25mm/s"; //打印时的走速
private double _amplitude = 10.0; //振幅
private string _amp = "10mm/mV"; //打印时的振幅
private double _calibrationVoltage = 2.0;//定标电压
float[] valueConvert(float[] valueArray)
{
float[] quotients = valueArray.Select(n => n / 500).ToArray();
return quotients;
}
/// <summary>
/// 获得心电诊断快照数据
/// </summary>
public void GetEcgViewDataImage(Image img, string addr, PatientInfo info, int type, string json)
{
_ecgDataDicAfterFilter.Clear();
// string ecgDataJsonStr = File.ReadAllText(Application.StartupPath + @"\60心拍心电图数据JSON.txt");
string ecgDataJsonStr = json;
leadDataModel LDM = JsonConvert.DeserializeObject<leadDataModel>(ecgDataJsonStr);
float[] LEAD_I = valueConvert(Array.ConvertAll(LDM.LEAD_I.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(0, LEAD_I.ToList());
float[] LEAD_II = valueConvert(Array.ConvertAll(LDM.LEAD_II.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(1, LEAD_II.ToList());
float[] LEAD_III = valueConvert(Array.ConvertAll(LDM.LEAD_III.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(2, LEAD_III.ToList());
float[] LEAD_AVR = valueConvert(Array.ConvertAll(LDM.LEAD_AVR.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(3, LEAD_AVR.ToList());
float[] LEAD_AVL = valueConvert(Array.ConvertAll(LDM.LEAD_AVL.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(4, LEAD_AVL.ToList());
float[] LEAD_AVF = valueConvert(Array.ConvertAll(LDM.LEAD_AVF.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(5, LEAD_AVF.ToList());
float[] LEAD_V1 = valueConvert(Array.ConvertAll(LDM.LEAD_V1.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(6, LEAD_V1.ToList());
float[] LEAD_V2 = valueConvert(Array.ConvertAll(LDM.LEAD_V2.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(7, LEAD_V2.ToList());
float[] LEAD_V3 = valueConvert(Array.ConvertAll(LDM.LEAD_V3.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(8, LEAD_V3.ToList());
float[] LEAD_V4 = valueConvert(Array.ConvertAll(LDM.LEAD_V4.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(9, LEAD_V4.ToList());
float[] LEAD_V5 = valueConvert(Array.ConvertAll(LDM.LEAD_V5.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(10, LEAD_V5.ToList());
float[] LEAD_V6 = valueConvert(Array.ConvertAll(LDM.LEAD_V6.Split(' '), float.Parse));
_ecgDataDicAfterFilter.Add(11, LEAD_V6.ToList());
if (!string.IsNullOrEmpty(info.orgname))
{
_reportTitleContent = info.orgname;
}
else
{
_reportTitleContent = "心电图报告";
}
_idStr = info.examid;//编号
collectTime = info.doctorDiagTime;//报告日期
//长两导的模式下 默认添加 第一导 和 第二导联 为 长显示两导联
_longLeadInfo.Add(0);
_longLeadInfo.Add(1);
//长三导的模式下 默认添加 第一导 和 第二导联和第三导联 为 长显示三导联
_longLeadInfo3.Add(0);
_longLeadInfo3.Add(1);
_longLeadInfo3.Add(2);
var cpew = new CommonPrintEcgWave();
var filter = _printFilter;
_ecgBitMap = new Bitmap(1090 * _printDpi / Dpi, 760 * _printDpi / Dpi);
_ecgBitMap.SetResolution(_printDpi, _printDpi);
cpew.InitEcgParameter(_ecgBitMap, _ecgDataDicAfterFilter, _isQiBo, _paperSpeed, _amplitude);
//************************************************************************
var ecgInfoList = new string[13];
ecgInfoList[0] = "姓名:" + info.name;//姓名
ecgInfoList[1] = "性别:" + info.gender;
ecgInfoList[2] = "年龄:" + info.age;
ecgInfoList[3] = "RV5+SV1" + info.rv5sv1plus + " mV";
ecgInfoList[4] = "PR间期" + info.pr + " ms";
ecgInfoList[5] = "P/T/QRS°" + info.pt + "°";
ecgInfoList[6] = "QT/QTC" + info.qtqtc + " ms";
ecgInfoList[7] = "QRS时限" + info.qrs + " ms";
ecgInfoList[8] = "RV5/SV1" + info.rv5sv1 + " mV";
ecgInfoList[9] = "HR" + info.hr + " bpm";
ecgInfoList[10] = "病室:" + info.ward;
ecgInfoList[11] = "床号";
ecgInfoList[12] = "住院号:" + info.regid;
SetAandP(); //设置增益和走速
var diagContent = info.diagContent;
var diagArray = diagContent.Split('\n');
diagContent = string.Empty;
for (var i = 0; i < diagArray.Length; i++) diagContent += diagArray[i].Trim();
if (_ecgDataDicAfterFilter.Count > 0)
_filterIndex = 0;
else
_filterIndex = 0;
// _leadindexdata = hScrollBar_Lead.Value * _filterIndex;
_leadindexdata = _filterIndex;
if (strreportMode == LeaderName15) filter += " 十五加一长导模式";
if (strreportMode == LeaderName18) filter += " 十八导模式";
if (reportMode == 2)
{
cpew.PrintBackGroundGrid(16, 196);
cpew.PrintLongReportHeadInfo(_reportTitleContent);
cpew.PrintLongEcgInfo(ecgInfoList, _idStr);
cpew.PrintLongDiagInfo(diagContent, info.doctorName,
collectTime, filter,
collectTime, "科室:" + info.DepartName, _amp, _ps, img, addr);
}
else
{
cpew.PrintBackGroundGrid(40, 196); //(197-42)*12=1860像素
cpew.PrintReportHeadInfo(_reportTitleContent, collectTime);
cpew.PrintEcgInfo(ecgInfoList, _idStr);
cpew.PrintDiagInfo(diagContent, info.doctorName, filter,
collectTime, "科室:" + info.DepartName, _amp, _ps, img, addr);
}
//6x2
if (reportMode == 0)
{
cpew.PrintEcgWave(8, 1, _leadindexdata);
cpew.PrintEcgLeadName(_calibrationVoltage * Coefficient);
}
//6x2+2
if (reportMode == 1)
{
cpew.PrintEcgWave(8, 1, _longLeadInfo, _leadindexdata, _leadindexdata);
cpew.PrintEcgLeadName(_calibrationVoltage * Coefficient, _longLeadInfo);
}
//十二长导
if (reportMode == 2)
{
cpew.PrintLongEcgWave(5, 1, _leadindexdata);
//cpew.PrintLongEcgWave(8, 1, _leadindexdata);
cpew.PrintLongEcgLeadName(_calibrationVoltage * Coefficient);
}
//4*3 II长导模式
if (reportMode == 3)
{
cpew.PrintEcgWaveFourOne(8, 1, _leadindexdata, _leadindexdata);
cpew.PrintLeadNameFourOne(_calibrationVoltage * Coefficient, _longLeadInfo);
}
//4*3+3 长导模式
if (reportMode == 4)
{
cpew.PrintEcgWaveFourThree(8, 1, _longLeadInfo3, _leadindexdata, _leadindexdata);
cpew.PrintLeadNameFourThree(_calibrationVoltage * Coefficient, _longLeadInfo3);
}
//15x1+1导
if (strreportMode == LeaderName15)
{
cpew.PrintEcgWaveFifteen(8, 1, _leadindexdata);
cpew.PrintLeadNameFifteen(_calibrationVoltage * Coefficient, LeaderType);
}
//十八导
if (strreportMode == LeaderName18)
{
cpew.PrintEcgWaveEighteen(8, 1, _leadindexdata);
cpew.PrintLeadNameEighteen(_calibrationVoltage * Coefficient);
}
switch (type)
{
case 1://返回base64
imagebase = UniversalFun.ConvertToBase64String(_ecgBitMap, ImageFormat.Jpeg);
break;
case 2://生成pdf
string path = string.IsNullOrEmpty(ConfigurationManager.AppSettings["path"]) ? Application.StartupPath : ConfigurationManager.AppSettings["path"];
UniversalFun.ConvertBitmapToPdf(_ecgBitMap, path + @"\" + info.examid + @"\" + info.examid + ".pdf");
filename = @"/" + info.examid + @"/" + info.examid + ".pdf";
// _ecgBitMap.Save("心电图报告.jpg", ImageFormat.Jpeg);
break;
default:
break;
}
//_sourceCegBmp = _ecgBitMap;
}
/// <summary>
/// 设置增益和走速和定标电压
/// </summary>
private void SetAandP()
{
if (cBoxSpeed == 0) //走速
{
_paperSpeed = 5;
_ps = "5mm/s";
}
if (cBoxSpeed == 1)
{
_paperSpeed = 10;
_ps = "10mm/s";
}
if (cBoxSpeed == 2) //走速
{
_paperSpeed = 12.5;
_ps = "12.5mm/s";
}
if (cBoxSpeed == 3)
{
_paperSpeed = 25.0;
_ps = "25mm/s";
}
if (cBoxSpeed == 4)
{
_paperSpeed = 50.0;
_ps = "50mm/s";
}
if (cBoxAmplitude == 0) //振幅
{
_amplitude = 2.5;
_amp = "2.5mm/mV";
_calibrationVoltage = 0.5;
}
if (cBoxAmplitude == 1)
{
_amplitude = 5.0;
_amp = "5mm/mV";
_calibrationVoltage = 1.0;
}
if (cBoxAmplitude == 2)
{
_amplitude = 10.0;
_amp = "10mm/mV";
_calibrationVoltage = 2.0;
}
if (cBoxAmplitude == 3)
{
_amplitude = 20.0;
_amp = "20mm/mV";
_calibrationVoltage = 4.0;
}
if (cBoxAmplitude == 4)
{
_amplitude = 40.0;
_amp = "40mm/mV";
_calibrationVoltage = 8.0;
}
}
}
}