From be31f2688f675ff8b29784e34e33269ac580e093 Mon Sep 17 00:00:00 2001
From: lxd <1004405501@qq.com>
Date: Wed, 11 Dec 2024 19:48:43 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE=E6=96=87?=
=?UTF-8?q?=E4=BB=B6=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
App.config | 44 +
ExamRecord.cs | 27 +
ExamRecords.cs | 13 +
FlyHisEcgdataModel.cs | 46 +
FlyHisTokenMsg.cs | 23 +
FtpHelper.cs | 267 +++++
HisInfo.cs | 36 +
Imaganddcm.cs | 163 +++
ImageInfo.cs | 15 +
InfoForm.Designer.cs | 388 +++++++
InfoForm.cs | 115 ++
InfoForm.resx | 120 +++
MsgInfo.cs | 15 +
Patient.cs | 20 +
ProcessForm.Designer.cs | 62 ++
ProcessForm.cs | 44 +
ProcessForm.resx | 120 +++
Program.cs | 23 +
Properties/AssemblyInfo.cs | 36 +
Properties/Resources.Designer.cs | 63 ++
Properties/Resources.resx | 117 ++
Properties/Settings.Designer.cs | 26 +
Properties/Settings.settings | 7 +
SaveFile.cs | 23 +
Series.cs | 16 +
StudyInfo.cs | 16 +
insimagescreenshotVO.cs | 22 +
packages.config | 16 +
video.Designer.cs | 633 +++++++++++
video.cs | 1734 ++++++++++++++++++++++++++++++
video.resx | 161 +++
videoGather.csproj | 189 ++++
videoGather.sln | 31 +
超声.ico | Bin 0 -> 894 bytes
超声诊断仪.ico | Bin 0 -> 16958 bytes
35 files changed, 4631 insertions(+)
create mode 100644 App.config
create mode 100644 ExamRecord.cs
create mode 100644 ExamRecords.cs
create mode 100644 FlyHisEcgdataModel.cs
create mode 100644 FlyHisTokenMsg.cs
create mode 100644 FtpHelper.cs
create mode 100644 HisInfo.cs
create mode 100644 Imaganddcm.cs
create mode 100644 ImageInfo.cs
create mode 100644 InfoForm.Designer.cs
create mode 100644 InfoForm.cs
create mode 100644 InfoForm.resx
create mode 100644 MsgInfo.cs
create mode 100644 Patient.cs
create mode 100644 ProcessForm.Designer.cs
create mode 100644 ProcessForm.cs
create mode 100644 ProcessForm.resx
create mode 100644 Program.cs
create mode 100644 Properties/AssemblyInfo.cs
create mode 100644 Properties/Resources.Designer.cs
create mode 100644 Properties/Resources.resx
create mode 100644 Properties/Settings.Designer.cs
create mode 100644 Properties/Settings.settings
create mode 100644 SaveFile.cs
create mode 100644 Series.cs
create mode 100644 StudyInfo.cs
create mode 100644 insimagescreenshotVO.cs
create mode 100644 packages.config
create mode 100644 video.Designer.cs
create mode 100644 video.cs
create mode 100644 video.resx
create mode 100644 videoGather.csproj
create mode 100644 videoGather.sln
create mode 100644 超声.ico
create mode 100644 超声诊断仪.ico
diff --git a/App.config b/App.config
new file mode 100644
index 0000000..563ead2
--- /dev/null
+++ b/App.config
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ExamRecord.cs b/ExamRecord.cs
new file mode 100644
index 0000000..5475f03
--- /dev/null
+++ b/ExamRecord.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace videoGather
+{
+ internal class ExamRecord
+ {
+ public string examId { get; set; }
+ public string pname { get; set; }
+ public string gender { get; set; }
+ public string birthday { get; set; }
+ public string deviceType { get; set; }
+ public string deviceName { get; set; }
+ public string seDc { get; set; }
+ public string examDate { get; set; }
+ public string examItemCode { get; set; }
+ public string examItemName { get; set; }
+ public string reportstatus { get; set; }
+ public string applicationDate { get; set; }
+ public string orgId { get; set; }
+ public string orgName { get; set; }
+ public string regId { get; set; }
+ }
+}
diff --git a/ExamRecords.cs b/ExamRecords.cs
new file mode 100644
index 0000000..751b138
--- /dev/null
+++ b/ExamRecords.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace videoGather
+{
+ internal class ExamRecords
+ {
+ public List Records { get; set; }
+ }
+}
diff --git a/FlyHisEcgdataModel.cs b/FlyHisEcgdataModel.cs
new file mode 100644
index 0000000..fff77e6
--- /dev/null
+++ b/FlyHisEcgdataModel.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace videoGather
+{
+ public class FlyHisEcgDataModel
+ {
+ public int total { get; set; }
+ public List rows { get; set; }
+ }
+
+ public class patientInfo
+ {
+ public string jianchaid { get; set; }
+ public string jianchabh { get; set; }
+ public string name { get; set; }
+ public string sfz { get; set; }
+ public string birthdate { get; set; }
+ public int age { get; set; }
+ public string sex { get; set; }
+ public string yiyuanname { get; set; }
+ public string yiyuanid { get; set; }
+ public string yiyuancode { get; set; }
+ public string kaifangsj { get; set; }
+ public string departmentCode { get; set; }
+ public string departmentName { get; set; }
+ public string resDoctorName { get; set; }
+ public string resDoctorCode { get; set; }
+ public string nation { get; set; }
+ public string patientCode { get; set; }
+ public string visitType { get; set; }
+ public List projects { get; set; }
+ public int code { get; set; }
+ public string msg { get; set; }
+ }
+
+ public class projectsInfo
+ {
+ public string jianchamingcheng { get; set; }
+ public string nhbm { get; set; }
+ public string category { get; set;}
+ }
+}
diff --git a/FlyHisTokenMsg.cs b/FlyHisTokenMsg.cs
new file mode 100644
index 0000000..c3512f2
--- /dev/null
+++ b/FlyHisTokenMsg.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace videoGather
+{
+
+ //福乐云HIS的token信息结构
+ public class FlyHisTokenMsgModel
+ {
+ public int code { get; set; }
+ public dataInfo data { get; set; }
+ }
+
+ public class dataInfo
+ {
+ public string access_token { get; set; }
+ public string expires_in { get; set; }
+ }
+
+}
diff --git a/FtpHelper.cs b/FtpHelper.cs
new file mode 100644
index 0000000..f62cb8f
--- /dev/null
+++ b/FtpHelper.cs
@@ -0,0 +1,267 @@
+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 videoGather
+{
+ 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 = 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();
+ }
+ }
+
+
+ //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);
+ }
+ }
+ }
+}
diff --git a/HisInfo.cs b/HisInfo.cs
new file mode 100644
index 0000000..b6ec202
--- /dev/null
+++ b/HisInfo.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace videoGather
+{
+ public class HisInfo
+ {
+ public string jianchaid { get; set; }
+ public string jianchabh { get; set; }
+ public string name { get; set; }
+ public string sfz { get; set; }
+ public string birthdate { get; set; }
+ public int age { get; set; }
+ public string sex { get; set; }
+ public string yiyuanname { get; set; }
+
+ public string yiyuancode { get; set; }
+
+ public string yiyuanid { get; set; }
+ public string kaifangsj { get; set; }
+ public string departmentCode { get; set; }
+ public string departmentName { get; set; }
+ public string resDoctorName { get; set; }
+ public string resDoctorCode { get; set; }
+ public string nation { get; set; }
+ public string patientCode { get; set; }
+ public string visitType { get; set; }
+
+ public string jianchamingcheng { get; set; }
+ public string nhbm { get; set; }
+ public string category { get; set; }
+ }
+}
diff --git a/Imaganddcm.cs b/Imaganddcm.cs
new file mode 100644
index 0000000..63d7581
--- /dev/null
+++ b/Imaganddcm.cs
@@ -0,0 +1,163 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing.Imaging;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Dicom;
+using Dicom.Imaging;
+using Dicom.IO.Buffer;
+using System.IO;
+using System.Collections;
+
+
+namespace videoGather
+{
+ public class Imaganddcm
+ {
+
+ ///
+ /// 存放转换后的dcm文件名称
+ ///
+ public static ArrayList Array=new ArrayList();
+
+ ///
+ /// 转换为Dicom格式
+ ///
+ /// 患者ID
+ /// 影像唯一号
+ /// 访问号
+ /// 患者姓名
+ /// jpg图像
+ /// dicom输出路径
+ ///
+ public static bool ConvertToDicomImages(string patId, string pisId, string textId, string patName, Bitmap inputImagePath, string outputDicomPath)
+ {
+
+ // 读取图像
+
+ // 创建DICOM数据集
+ var dicomDataset = new DicomDataset
+ {
+ { DicomTag.PatientID, patId },
+ { DicomTag.PatientName, patName },
+ { DicomTag.StudyInstanceUID, pisId },//StudyUid
+ { DicomTag.SeriesInstanceUID, DicomUIDGenerator.GenerateDerivedFromUUID().UID },
+ { DicomTag.SOPInstanceUID, DicomUIDGenerator.GenerateDerivedFromUUID().UID },
+ { DicomTag.AccessionNumber,textId },//访问号
+ { DicomTag.SOPClassUID, DicomUID.SecondaryCaptureImageStorage },
+ { DicomTag.PhotometricInterpretation, "RGB" },
+ { DicomTag.Rows, (ushort)inputImagePath.Height },
+ { DicomTag.Columns, (ushort)inputImagePath.Width },
+ { DicomTag.SamplesPerPixel, (ushort)3 },
+ { DicomTag.BitsAllocated, (ushort)8 },
+ { DicomTag.BitsStored, (ushort)8 },
+ { DicomTag.HighBit, (ushort)7 }
+
+
+
+
+ };
+
+ // 创建像素数据
+ var pixelData = DicomPixelData.Create(dicomDataset, true);
+ byte[] imageData = GetImageData(inputImagePath);
+ pixelData.AddFrame(new MemoryByteBuffer(imageData));
+
+ // 创建 DICOM 文件
+ var dicomFile = new DicomFile(dicomDataset);
+ string guid= Guid.NewGuid().ToString("D");
+ // 保存 DICOM 文件
+ dicomFile.Save(outputDicomPath+"\\"+ guid+".dcm");
+ Array.Add(outputDicomPath + "\\" + guid + ".dcm");
+ return File.Exists(outputDicomPath+ "\\" + guid + ".dcm");
+
+ }
+
+ private static byte[] GetImageData(Bitmap image)
+ {
+ // 将图像数据转换为DICOM格式
+
+ BitmapData bitmapData = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
+ int actualDataWidth = image.Width * 3;
+ int byteCount = actualDataWidth * image.Height;
+ byte[] pixels = new byte[byteCount];
+ IntPtr ptr = bitmapData.Scan0;
+ for (int y = 0; y < image.Height; y++)
+ {
+ // Copy the data from the bitmap into the array
+ System.Runtime.InteropServices.Marshal.Copy(ptr + (y * bitmapData.Stride), pixels, y * actualDataWidth, actualDataWidth);
+ }
+ image.UnlockBits(bitmapData);
+
+ // Swap the Red and Blue channels to convert from RGB to BGR
+ for (int i = 0; i < byteCount; i += 3)
+ {
+ byte temp = pixels[i];
+ pixels[i] = pixels[i + 2];
+ pixels[i + 2] = temp;
+ }
+
+ return pixels;
+ }
+
+
+ public static bool ImportImage(string patId, string pisId, string textId, string patName, Bitmap inputImagePath, string outputDicomPath)
+ {
+
+ //bitmap = GetValidImage(bitmap);
+
+
+ byte[] pixels = GetPixels(inputImagePath);
+ MemoryByteBuffer buffer = new MemoryByteBuffer(pixels);
+ DicomDataset dataset = new DicomDataset();
+ //FillDataset(dataset);
+ dataset.Add(DicomTag.PhotometricInterpretation, PhotometricInterpretation.Rgb.Value);
+ dataset.Add(DicomTag.Rows, (ushort)inputImagePath.Height);
+ dataset.Add(DicomTag.Columns, (ushort)inputImagePath.Width);
+ dataset.Add(DicomTag.BitsAllocated, (ushort)8);
+ dataset.Add(DicomTag.SOPClassUID, DicomUIDGenerator.GenerateDerivedFromUUID().UID);
+ dataset.Add(DicomTag.SOPInstanceUID, DicomUIDGenerator.GenerateDerivedFromUUID().UID);
+ dataset.Add(DicomTag.PatientID, patId);
+ dataset.Add(DicomTag.PatientName, patName);
+ dataset.Add(DicomTag.StudyInstanceUID, pisId);
+ DicomPixelData pixelData = DicomPixelData.Create(dataset, true);
+ pixelData.BitsStored = 8;
+ //pixelData.BitsAllocated = 8;
+ pixelData.SamplesPerPixel = 3;
+ pixelData.HighBit = 7;
+ pixelData.PixelRepresentation = 0;
+ pixelData.PlanarConfiguration = 0;
+ pixelData.AddFrame(buffer);
+
+ DicomFile dicomfile = new DicomFile(dataset);
+ string guid = Guid.NewGuid().ToString("D");
+ Array.Add(outputDicomPath + "\\" + guid + ".dcm");
+ dicomfile.Save(outputDicomPath + "\\" + guid + ".dcm");
+ return File.Exists(outputDicomPath + "\\" + guid + ".dcm");
+ }
+ public static byte[] GetPixels(Bitmap bitmap)
+ {
+ byte[] bytes = new byte[bitmap.Width * bitmap.Height * 3];
+ int wide = bitmap.Width;
+ int i = 0;
+ int height = bitmap.Height;
+ for (int y = 0; y < height; y++)
+ {
+ for (int x = 0; x < wide; x++)
+ {
+ var srcColor = bitmap.GetPixel(x, y);
+ //bytes[i] = (byte)(srcColor.R * .299 + srcColor.G * .587 + srcColor.B * .114);
+ bytes[i] = srcColor.R;
+ i++;
+ bytes[i] = srcColor.G;
+ i++;
+ bytes[i] = srcColor.B;
+ i++;
+ }
+ }
+ return bytes;
+ }
+ }
+}
diff --git a/ImageInfo.cs b/ImageInfo.cs
new file mode 100644
index 0000000..af7fa9b
--- /dev/null
+++ b/ImageInfo.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace videoGather
+{
+ internal class image
+ {
+ public string ImageNumber { get; set; }
+ public string ObjectFile { get; set; }
+ public string UrlPrefix { get; set; }
+ }
+}
diff --git a/InfoForm.Designer.cs b/InfoForm.Designer.cs
new file mode 100644
index 0000000..7d786cb
--- /dev/null
+++ b/InfoForm.Designer.cs
@@ -0,0 +1,388 @@
+namespace videoGather
+{
+ partial class InfoForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.button1 = new System.Windows.Forms.Button();
+ this.label1 = new System.Windows.Forms.Label();
+ this.textjianchaid = new System.Windows.Forms.TextBox();
+ this.txt_jianchabh = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.txtname = new System.Windows.Forms.TextBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.textsfz = new System.Windows.Forms.TextBox();
+ this.label4 = new System.Windows.Forms.Label();
+ this.label5 = new System.Windows.Forms.Label();
+ this.datebirthdate = new System.Windows.Forms.DateTimePicker();
+ this.textage = new System.Windows.Forms.TextBox();
+ this.label6 = new System.Windows.Forms.Label();
+ this.label7 = new System.Windows.Forms.Label();
+ this.comboBoxsex = new System.Windows.Forms.ComboBox();
+ this.label8 = new System.Windows.Forms.Label();
+ this.datekaifangsj = new System.Windows.Forms.DateTimePicker();
+ this.label9 = new System.Windows.Forms.Label();
+ this.textexamItemName = new System.Windows.Forms.TextBox();
+ this.textexamItemcode = new System.Windows.Forms.TextBox();
+ this.label10 = new System.Windows.Forms.Label();
+ this.button2 = new System.Windows.Forms.Button();
+ this.button3 = new System.Windows.Forms.Button();
+ this.button4 = new System.Windows.Forms.Button();
+ this.button5 = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // button1
+ //
+ this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.button1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.button1.Location = new System.Drawing.Point(306, 625);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(75, 43);
+ this.button1.TabIndex = 0;
+ this.button1.Text = "新增";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.BackColor = System.Drawing.Color.Transparent;
+ this.label1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.label1.ForeColor = System.Drawing.Color.Red;
+ this.label1.Location = new System.Drawing.Point(5, 28);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(63, 21);
+ this.label1.TabIndex = 1;
+ this.label1.Text = "患者ID:";
+ //
+ // textjianchaid
+ //
+ this.textjianchaid.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.textjianchaid.Location = new System.Drawing.Point(70, 26);
+ this.textjianchaid.Name = "textjianchaid";
+ this.textjianchaid.Size = new System.Drawing.Size(161, 29);
+ this.textjianchaid.TabIndex = 2;
+ //
+ // txt_jianchabh
+ //
+ this.txt_jianchabh.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.txt_jianchabh.Location = new System.Drawing.Point(371, 28);
+ this.txt_jianchabh.Name = "txt_jianchabh";
+ this.txt_jianchabh.Size = new System.Drawing.Size(192, 29);
+ this.txt_jianchabh.TabIndex = 4;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.label2.ForeColor = System.Drawing.Color.Red;
+ this.label2.Location = new System.Drawing.Point(294, 31);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(78, 21);
+ this.label2.TabIndex = 3;
+ this.label2.Text = "检查编号:";
+ //
+ // txtname
+ //
+ this.txtname.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.txtname.ForeColor = System.Drawing.SystemColors.WindowText;
+ this.txtname.Location = new System.Drawing.Point(75, 83);
+ this.txtname.Name = "txtname";
+ this.txtname.Size = new System.Drawing.Size(161, 29);
+ this.txtname.TabIndex = 6;
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.label3.ForeColor = System.Drawing.Color.Red;
+ this.label3.Location = new System.Drawing.Point(-1, 86);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(78, 21);
+ this.label3.TabIndex = 5;
+ this.label3.Text = "患者姓名:";
+ //
+ // textsfz
+ //
+ this.textsfz.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.textsfz.Location = new System.Drawing.Point(603, 83);
+ this.textsfz.Name = "textsfz";
+ this.textsfz.Size = new System.Drawing.Size(169, 29);
+ this.textsfz.TabIndex = 8;
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.label4.Location = new System.Drawing.Point(535, 86);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(62, 21);
+ this.label4.TabIndex = 7;
+ this.label4.Text = "身份证:";
+ //
+ // label5
+ //
+ this.label5.AutoSize = true;
+ this.label5.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.label5.Location = new System.Drawing.Point(254, 86);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(78, 21);
+ this.label5.TabIndex = 9;
+ this.label5.Text = "出生日期:";
+ //
+ // datebirthdate
+ //
+ this.datebirthdate.CustomFormat = "yyyy-MM-dd";
+ this.datebirthdate.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.datebirthdate.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+ this.datebirthdate.Location = new System.Drawing.Point(335, 83);
+ this.datebirthdate.Name = "datebirthdate";
+ this.datebirthdate.Size = new System.Drawing.Size(192, 26);
+ this.datebirthdate.TabIndex = 10;
+ //
+ // textage
+ //
+ this.textage.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.textage.Location = new System.Drawing.Point(717, 28);
+ this.textage.Name = "textage";
+ this.textage.Size = new System.Drawing.Size(55, 29);
+ this.textage.TabIndex = 12;
+ //
+ // label6
+ //
+ this.label6.AutoSize = true;
+ this.label6.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.label6.Location = new System.Drawing.Point(665, 33);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(46, 21);
+ this.label6.TabIndex = 11;
+ this.label6.Text = "年龄:";
+ //
+ // label7
+ //
+ this.label7.AutoSize = true;
+ this.label7.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.label7.Location = new System.Drawing.Point(23, 138);
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size(46, 21);
+ this.label7.TabIndex = 13;
+ this.label7.Text = "性别:";
+ //
+ // comboBoxsex
+ //
+ this.comboBoxsex.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.comboBoxsex.FormattingEnabled = true;
+ this.comboBoxsex.Items.AddRange(new object[] {
+ "男",
+ "女"});
+ this.comboBoxsex.Location = new System.Drawing.Point(75, 136);
+ this.comboBoxsex.Name = "comboBoxsex";
+ this.comboBoxsex.Size = new System.Drawing.Size(161, 28);
+ this.comboBoxsex.TabIndex = 15;
+ //
+ // label8
+ //
+ this.label8.AutoSize = true;
+ this.label8.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.label8.ForeColor = System.Drawing.Color.DarkRed;
+ this.label8.Location = new System.Drawing.Point(251, 143);
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size(78, 21);
+ this.label8.TabIndex = 16;
+ this.label8.Text = "开方时间:";
+ //
+ // datekaifangsj
+ //
+ this.datekaifangsj.CustomFormat = "yyyy-MM-dd HH:mm:ss";
+ this.datekaifangsj.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.datekaifangsj.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+ this.datekaifangsj.Location = new System.Drawing.Point(335, 139);
+ this.datekaifangsj.Name = "datekaifangsj";
+ this.datekaifangsj.Size = new System.Drawing.Size(192, 26);
+ this.datekaifangsj.TabIndex = 17;
+ //
+ // label9
+ //
+ this.label9.AutoSize = true;
+ this.label9.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.label9.ForeColor = System.Drawing.Color.Red;
+ this.label9.Location = new System.Drawing.Point(527, 142);
+ this.label9.Name = "label9";
+ this.label9.Size = new System.Drawing.Size(78, 21);
+ this.label9.TabIndex = 18;
+ this.label9.Text = "检查名称:";
+ //
+ // textexamItemName
+ //
+ this.textexamItemName.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.textexamItemName.ForeColor = System.Drawing.SystemColors.WindowText;
+ this.textexamItemName.Location = new System.Drawing.Point(603, 139);
+ this.textexamItemName.Name = "textexamItemName";
+ this.textexamItemName.Size = new System.Drawing.Size(169, 29);
+ this.textexamItemName.TabIndex = 19;
+ //
+ // textexamItemcode
+ //
+ this.textexamItemcode.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.textexamItemcode.Location = new System.Drawing.Point(75, 197);
+ this.textexamItemcode.Name = "textexamItemcode";
+ this.textexamItemcode.Size = new System.Drawing.Size(161, 29);
+ this.textexamItemcode.TabIndex = 21;
+ //
+ // label10
+ //
+ this.label10.AutoSize = true;
+ this.label10.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.label10.ForeColor = System.Drawing.Color.Red;
+ this.label10.Location = new System.Drawing.Point(-1, 200);
+ this.label10.Name = "label10";
+ this.label10.Size = new System.Drawing.Size(78, 21);
+ this.label10.TabIndex = 20;
+ this.label10.Text = "项目编码:";
+ //
+ // button2
+ //
+ this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.button2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.button2.Location = new System.Drawing.Point(400, 625);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(75, 43);
+ this.button2.TabIndex = 22;
+ this.button2.Text = "取消";
+ this.button2.UseVisualStyleBackColor = true;
+ this.button2.Click += new System.EventHandler(this.button2_Click);
+ //
+ // button3
+ //
+ this.button3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.button3.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.button3.Location = new System.Drawing.Point(567, 28);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(59, 32);
+ this.button3.TabIndex = 23;
+ this.button3.Text = "生成";
+ this.button3.UseVisualStyleBackColor = true;
+ this.button3.Click += new System.EventHandler(this.button3_Click);
+ //
+ // button4
+ //
+ this.button4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.button4.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.button4.Location = new System.Drawing.Point(242, 197);
+ this.button4.Name = "button4";
+ this.button4.Size = new System.Drawing.Size(59, 32);
+ this.button4.TabIndex = 24;
+ this.button4.Text = "生成";
+ this.button4.UseVisualStyleBackColor = true;
+ this.button4.Click += new System.EventHandler(this.button4_Click);
+ //
+ // button5
+ //
+ this.button5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.button5.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.button5.Location = new System.Drawing.Point(232, 25);
+ this.button5.Name = "button5";
+ this.button5.Size = new System.Drawing.Size(59, 32);
+ this.button5.TabIndex = 25;
+ this.button5.Text = "生成";
+ this.button5.UseVisualStyleBackColor = true;
+ this.button5.Click += new System.EventHandler(this.button5_Click);
+ //
+ // InfoForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 680);
+ this.Controls.Add(this.button5);
+ this.Controls.Add(this.button4);
+ this.Controls.Add(this.button3);
+ this.Controls.Add(this.button2);
+ this.Controls.Add(this.textexamItemcode);
+ this.Controls.Add(this.label10);
+ this.Controls.Add(this.textexamItemName);
+ this.Controls.Add(this.label9);
+ this.Controls.Add(this.datekaifangsj);
+ this.Controls.Add(this.label8);
+ this.Controls.Add(this.comboBoxsex);
+ this.Controls.Add(this.label7);
+ this.Controls.Add(this.textage);
+ this.Controls.Add(this.label6);
+ this.Controls.Add(this.datebirthdate);
+ this.Controls.Add(this.label5);
+ this.Controls.Add(this.textsfz);
+ this.Controls.Add(this.label4);
+ this.Controls.Add(this.txtname);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.txt_jianchabh);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.textjianchaid);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.button1);
+ this.MaximizeBox = false;
+ this.Name = "InfoForm";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "新增患者";
+ this.Load += new System.EventHandler(this.InfoForm_Load);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox textjianchaid;
+ private System.Windows.Forms.TextBox txt_jianchabh;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox txtname;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.TextBox textsfz;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.Label label5;
+ private System.Windows.Forms.DateTimePicker datebirthdate;
+ private System.Windows.Forms.TextBox textage;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.Label label7;
+ private System.Windows.Forms.ComboBox comboBoxsex;
+ private System.Windows.Forms.Label label8;
+ private System.Windows.Forms.DateTimePicker datekaifangsj;
+ private System.Windows.Forms.Label label9;
+ private System.Windows.Forms.TextBox textexamItemName;
+ private System.Windows.Forms.TextBox textexamItemcode;
+ private System.Windows.Forms.Label label10;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.Button button4;
+ private System.Windows.Forms.Button button5;
+ }
+}
\ No newline at end of file
diff --git a/InfoForm.cs b/InfoForm.cs
new file mode 100644
index 0000000..502aedc
--- /dev/null
+++ b/InfoForm.cs
@@ -0,0 +1,115 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Configuration;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace videoGather
+{
+ public partial class InfoForm : Form
+ {
+ public InfoForm()
+ {
+ InitializeComponent();
+ }
+ public HisInfo info;
+ ///
+ /// 新增
+ ///
+ ///
+ ///
+ private void button1_Click(object sender, EventArgs e)
+ {
+ if (!inspect())
+ {
+ return;
+ }
+ info = new HisInfo();
+ info.jianchaid = textjianchaid.Text.Trim();
+ info.name = txtname.Text.Trim();
+ info.jianchabh = txt_jianchabh.Text.Trim();
+ info.sfz = textsfz.Text.Trim();
+ info.birthdate = datebirthdate.Value.ToString("yyyy-MM-dd");
+ info.age = string.IsNullOrEmpty(textage.Text.Trim())?0:int.Parse(textage.Text.Trim());
+ info.sex = comboBoxsex.Text;
+ info.yiyuanname = ConfigurationManager.AppSettings["yymc"];
+ info.yiyuancode = ConfigurationManager.AppSettings["yycode"];
+ info.kaifangsj = datekaifangsj.Value.ToString("yyyy-MM-dd HH:mm:ss");
+ info.jianchamingcheng = textexamItemName.Text;
+ info.nhbm = textexamItemcode.Text;
+ this.DialogResult = DialogResult.OK;
+ }
+ ///
+ /// 初始化
+ ///
+ ///
+ ///
+ private void InfoForm_Load(object sender, EventArgs e)
+ {
+ datekaifangsj.Value = DateTime.Now;
+ }
+
+ private void button2_Click(object sender, EventArgs e)
+ {
+ this.DialogResult = DialogResult.Cancel;
+ }
+
+ ///
+ /// 生成项目编码
+ ///
+ ///
+ ///
+ private void button4_Click(object sender, EventArgs e)
+ {
+ Guid guid = Guid.NewGuid();
+ string guidString = guid.ToString("N"); // 没有分隔符
+ textexamItemcode.Text = "US" + guidString;
+ }
+ ///
+ /// 生成检查编号
+ ///
+ ///
+ ///
+ private void button3_Click(object sender, EventArgs e)
+ {
+ Guid guid = Guid.NewGuid();
+ string guidString = guid.ToString("N"); // 没有分隔符
+ txt_jianchabh.Text = guidString;
+ }
+
+
+ ///
+ /// 验证必填
+ ///
+ private bool inspect()
+ {
+ bool bol=true;
+ if (string.IsNullOrEmpty(textjianchaid.Text.Trim()) ||
+ string.IsNullOrEmpty(txt_jianchabh.Text.Trim()) ||
+ string.IsNullOrEmpty(txtname.Text.Trim()) ||
+ string.IsNullOrEmpty(textexamItemName.Text.Trim()) ||
+ string.IsNullOrEmpty(textexamItemcode.Text.Trim()))
+ {
+
+ MessageBox.Show("必填字段不能为空");
+ return false;
+ }
+ return bol;
+ }
+ ///
+ /// 生成患者ID
+ ///
+ ///
+ ///
+ private void button5_Click(object sender, EventArgs e)
+ {
+ string time= DateTime.Now.ToString("yyyyMMddHHmmss");
+ textjianchaid.Text = "M"+time;
+ }
+ }
+}
diff --git a/InfoForm.resx b/InfoForm.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/InfoForm.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/MsgInfo.cs b/MsgInfo.cs
new file mode 100644
index 0000000..8429fda
--- /dev/null
+++ b/MsgInfo.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace videoGather
+{
+ internal class MsgInfo
+ {
+ public string code { get; set; }
+ public string data { get; set; }
+ public string msg { get; set; }
+ }
+}
diff --git a/Patient.cs b/Patient.cs
new file mode 100644
index 0000000..4324e22
--- /dev/null
+++ b/Patient.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace videoGather
+{
+ internal class Patient
+ {
+ public string PatientID { get; set; }
+ public string PatientNam { get; set; }
+ public string PatientBir { get; set; }
+ public string PatientSex { get; set; }
+ public string OrgId { get; set; }
+ public string OrgName { get; set; }
+ public string StudyDate { get; set; }
+ public List Studies { get; set; }
+ }
+}
diff --git a/ProcessForm.Designer.cs b/ProcessForm.Designer.cs
new file mode 100644
index 0000000..41655f9
--- /dev/null
+++ b/ProcessForm.Designer.cs
@@ -0,0 +1,62 @@
+namespace videoGather
+{
+ partial class ProcessForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.progressBar1 = new System.Windows.Forms.ProgressBar();
+ this.SuspendLayout();
+ //
+ // progressBar1
+ //
+ this.progressBar1.Location = new System.Drawing.Point(12, 23);
+ this.progressBar1.Name = "progressBar1";
+ this.progressBar1.Size = new System.Drawing.Size(362, 23);
+ this.progressBar1.TabIndex = 0;
+ //
+ // ProcessForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(386, 69);
+ this.Controls.Add(this.progressBar1);
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "ProcessForm";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "正在上传";
+ this.TopMost = true;
+ this.Load += new System.EventHandler(this.ProcessForm_Load);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.ProgressBar progressBar1;
+ }
+}
\ No newline at end of file
diff --git a/ProcessForm.cs b/ProcessForm.cs
new file mode 100644
index 0000000..8f3f593
--- /dev/null
+++ b/ProcessForm.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace videoGather
+{
+ public partial class ProcessForm : Form
+ {
+ private BackgroundWorker backgroundWorker1;
+ public ProcessForm(BackgroundWorker backgroundWorker1)
+ {
+ InitializeComponent();
+ this.backgroundWorker1 = backgroundWorker1;
+ this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
+ this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
+
+ }
+
+ private void ProcessForm_Load(object sender, EventArgs e)
+ {
+
+ }
+
+ void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
+ {
+ this.Close();//执行完之后,直接关闭页面
+ }
+ void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
+ {
+ this.progressBar1.Value = e.ProgressPercentage;
+ }
+ private void button1_Click(object sender, EventArgs e)
+ {
+ this.backgroundWorker1.CancelAsync();
+ this.Close();
+ }
+ }
+}
diff --git a/ProcessForm.resx b/ProcessForm.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/ProcessForm.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Program.cs b/Program.cs
new file mode 100644
index 0000000..52e3e12
--- /dev/null
+++ b/Program.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using videoGather;
+
+namespace videoGather
+{
+ static class Program
+ {
+ ///
+ /// 应用程序的主入口点。
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new video());
+ }
+ }
+}
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..089a41d
--- /dev/null
+++ b/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("视频采集")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("AForge拍照及录像")]
+[assembly: AssemblyCopyright("Copyright © 2023")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("2990c129-31d9-4aa3-b10d-d2773f140ff4")]
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..c0193d8
--- /dev/null
+++ b/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace videoGather.Properties {
+ using System;
+
+
+ ///
+ /// 一个强类型的资源类,用于查找本地化的字符串等。
+ ///
+ // 此类是由 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() {
+ }
+
+ ///
+ /// 返回此类使用的缓存的 ResourceManager 实例。
+ ///
+ [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("videoGather.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 重写当前线程的 CurrentUICulture 属性,对
+ /// 使用此强类型资源类的所有资源查找执行重写。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..330e6f1
--- /dev/null
+++ b/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace videoGather.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.10.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;
+ }
+ }
+ }
+}
diff --git a/Properties/Settings.settings b/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/SaveFile.cs b/SaveFile.cs
new file mode 100644
index 0000000..a1e2c53
--- /dev/null
+++ b/SaveFile.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace videoGather
+{
+ internal class SaveFile
+ {
+
+
+ public string folderPath { get; set; }
+
+ public string imagebase { get; set; }
+
+ public string fileName { get; set; }
+
+ public string extension { get; set; }
+
+ public string orgId { get; set; }
+ }
+}
diff --git a/Series.cs b/Series.cs
new file mode 100644
index 0000000..e28f989
--- /dev/null
+++ b/Series.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace videoGather
+{
+ internal class Series
+ {
+ public string SeriesNumb { get; set; }
+ public string SeriesDesc { get; set; }
+ public string Modality { get; set; }
+ public List image { get; set; }
+ }
+}
diff --git a/StudyInfo.cs b/StudyInfo.cs
new file mode 100644
index 0000000..3163403
--- /dev/null
+++ b/StudyInfo.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace videoGather
+{
+ internal class Study
+ {
+ public string StudyDescr { get; set; }
+ public string StudyID { get; set; }
+ public string StudyModal { get; set; }
+ public List Series { get; set; }
+ }
+}
diff --git a/insimagescreenshotVO.cs b/insimagescreenshotVO.cs
new file mode 100644
index 0000000..78c955a
--- /dev/null
+++ b/insimagescreenshotVO.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace videoGather
+{
+ internal class insimagescreenshotVO
+ {
+ public string id { get; set; }
+
+ public string imagebase { get; set; }
+
+ public string imgType { get; set; }
+
+ public string imgDescription { get; set; }
+
+ public string orgId { get; set; }
+
+ }
+}
diff --git a/packages.config b/packages.config
new file mode 100644
index 0000000..9409584
--- /dev/null
+++ b/packages.config
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/video.Designer.cs b/video.Designer.cs
new file mode 100644
index 0000000..ec2a460
--- /dev/null
+++ b/video.Designer.cs
@@ -0,0 +1,633 @@
+
+namespace videoGather
+{
+ partial class video
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 窗体设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要修改
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(video));
+ this.cb_CameraSelect = new System.Windows.Forms.ComboBox();
+ this.btn_Capture = new System.Windows.Forms.Button();
+ this.btn_Close = new System.Windows.Forms.Button();
+ this.gb_ButtonBox = new System.Windows.Forms.GroupBox();
+ this.button6 = new System.Windows.Forms.Button();
+ this.label3 = new System.Windows.Forms.Label();
+ this.btn_Connect = new System.Windows.Forms.Button();
+ this.button1 = new System.Windows.Forms.Button();
+ this.label1 = new System.Windows.Forms.Label();
+ this.button4 = new System.Windows.Forms.Button();
+ this.label6 = new System.Windows.Forms.Label();
+ this.lab_Time = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.btn_EndVideo = new System.Windows.Forms.Button();
+ this.btn_PauseVideo = new System.Windows.Forms.Button();
+ this.btn_StartVideo = new System.Windows.Forms.Button();
+ this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.button5 = new System.Windows.Forms.Button();
+ this.txt_h = new System.Windows.Forms.TextBox();
+ this.lab_h = new System.Windows.Forms.Label();
+ this.txt_w = new System.Windows.Forms.TextBox();
+ this.lab_w = new System.Windows.Forms.Label();
+ this.txt_y = new System.Windows.Forms.TextBox();
+ this.lab_y = new System.Windows.Forms.Label();
+ this.txt_x = new System.Windows.Forms.TextBox();
+ this.lab_x = new System.Windows.Forms.Label();
+ this.checkBox1 = new System.Windows.Forms.CheckBox();
+ this.label5 = new System.Windows.Forms.Label();
+ this.label4 = new System.Windows.Forms.Label();
+ this.button3 = new System.Windows.Forms.Button();
+ this.button2 = new System.Windows.Forms.Button();
+ this.groupBox3 = new System.Windows.Forms.GroupBox();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.dGVPatient = new System.Windows.Forms.DataGridView();
+ this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.name = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.sex = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.age = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.jianchamingcheng = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.kaifangsi = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.gb_CameraPanel = new System.Windows.Forms.GroupBox();
+ this.vsp_Panel = new AForge.Controls.VideoSourcePlayer();
+ this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
+ this.gb_ButtonBox.SuspendLayout();
+ this.groupBox2.SuspendLayout();
+ this.groupBox3.SuspendLayout();
+ this.groupBox1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.dGVPatient)).BeginInit();
+ this.gb_CameraPanel.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // cb_CameraSelect
+ //
+ this.cb_CameraSelect.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.cb_CameraSelect.FormattingEnabled = true;
+ this.cb_CameraSelect.Location = new System.Drawing.Point(24, 140);
+ this.cb_CameraSelect.Margin = new System.Windows.Forms.Padding(2);
+ this.cb_CameraSelect.Name = "cb_CameraSelect";
+ this.cb_CameraSelect.Size = new System.Drawing.Size(150, 24);
+ this.cb_CameraSelect.TabIndex = 12;
+ //
+ // btn_Capture
+ //
+ this.btn_Capture.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.btn_Capture.Location = new System.Drawing.Point(19, 104);
+ this.btn_Capture.Margin = new System.Windows.Forms.Padding(2);
+ this.btn_Capture.Name = "btn_Capture";
+ this.btn_Capture.Size = new System.Drawing.Size(98, 31);
+ this.btn_Capture.TabIndex = 4;
+ this.btn_Capture.Text = "截图(F9)";
+ this.btn_Capture.UseVisualStyleBackColor = true;
+ this.btn_Capture.Click += new System.EventHandler(this.btn_Capture_Click);
+ //
+ // btn_Close
+ //
+ this.btn_Close.Location = new System.Drawing.Point(255, 138);
+ this.btn_Close.Margin = new System.Windows.Forms.Padding(2);
+ this.btn_Close.Name = "btn_Close";
+ this.btn_Close.Size = new System.Drawing.Size(52, 28);
+ this.btn_Close.TabIndex = 15;
+ this.btn_Close.Text = "关闭源";
+ this.btn_Close.UseVisualStyleBackColor = true;
+ this.btn_Close.Click += new System.EventHandler(this.btn_Close_Click);
+ //
+ // gb_ButtonBox
+ //
+ this.gb_ButtonBox.Controls.Add(this.button6);
+ this.gb_ButtonBox.Controls.Add(this.label3);
+ this.gb_ButtonBox.Controls.Add(this.btn_Connect);
+ this.gb_ButtonBox.Controls.Add(this.button1);
+ this.gb_ButtonBox.Controls.Add(this.label1);
+ this.gb_ButtonBox.Controls.Add(this.button4);
+ this.gb_ButtonBox.Controls.Add(this.label6);
+ this.gb_ButtonBox.Controls.Add(this.btn_Close);
+ this.gb_ButtonBox.Controls.Add(this.lab_Time);
+ this.gb_ButtonBox.Controls.Add(this.label2);
+ this.gb_ButtonBox.Controls.Add(this.btn_EndVideo);
+ this.gb_ButtonBox.Controls.Add(this.btn_PauseVideo);
+ this.gb_ButtonBox.Controls.Add(this.btn_StartVideo);
+ this.gb_ButtonBox.Controls.Add(this.btn_Capture);
+ this.gb_ButtonBox.Controls.Add(this.cb_CameraSelect);
+ this.gb_ButtonBox.Dock = System.Windows.Forms.DockStyle.Top;
+ this.gb_ButtonBox.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.gb_ButtonBox.Location = new System.Drawing.Point(3, 157);
+ this.gb_ButtonBox.Margin = new System.Windows.Forms.Padding(2);
+ this.gb_ButtonBox.Name = "gb_ButtonBox";
+ this.gb_ButtonBox.Padding = new System.Windows.Forms.Padding(2);
+ this.gb_ButtonBox.Size = new System.Drawing.Size(556, 204);
+ this.gb_ButtonBox.TabIndex = 16;
+ this.gb_ButtonBox.TabStop = false;
+ this.gb_ButtonBox.Text = "功能区";
+ this.gb_ButtonBox.Enter += new System.EventHandler(this.gb_ButtonBox_Enter);
+ //
+ // button6
+ //
+ this.button6.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.button6.Location = new System.Drawing.Point(400, 173);
+ this.button6.Margin = new System.Windows.Forms.Padding(2);
+ this.button6.Name = "button6";
+ this.button6.Size = new System.Drawing.Size(127, 31);
+ this.button6.TabIndex = 30;
+ this.button6.Text = "添加患者";
+ this.button6.UseVisualStyleBackColor = true;
+ this.button6.Click += new System.EventHandler(this.button6_Click);
+ //
+ // label3
+ //
+ this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.label3.AutoSize = true;
+ this.label3.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.label3.ForeColor = System.Drawing.Color.Red;
+ this.label3.Location = new System.Drawing.Point(2, 182);
+ this.label3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(109, 16);
+ this.label3.TabIndex = 29;
+ this.label3.Text = "双击选择患者";
+ //
+ // btn_Connect
+ //
+ this.btn_Connect.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.btn_Connect.Location = new System.Drawing.Point(199, 138);
+ this.btn_Connect.Margin = new System.Windows.Forms.Padding(2);
+ this.btn_Connect.Name = "btn_Connect";
+ this.btn_Connect.Size = new System.Drawing.Size(52, 27);
+ this.btn_Connect.TabIndex = 17;
+ this.btn_Connect.Text = "连接";
+ this.btn_Connect.UseVisualStyleBackColor = true;
+ this.btn_Connect.Click += new System.EventHandler(this.btn_Connect_Click);
+ //
+ // button1
+ //
+ this.button1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.button1.Location = new System.Drawing.Point(400, 139);
+ this.button1.Margin = new System.Windows.Forms.Padding(2);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(127, 31);
+ this.button1.TabIndex = 28;
+ this.button1.Text = "刷新患者(HIS)";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click_1);
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(226, 111);
+ this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(15, 16);
+ this.label1.TabIndex = 26;
+ this.label1.Text = "0";
+ //
+ // button4
+ //
+ this.button4.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.button4.Location = new System.Drawing.Point(400, 23);
+ this.button4.Margin = new System.Windows.Forms.Padding(2);
+ this.button4.Name = "button4";
+ this.button4.Size = new System.Drawing.Size(127, 112);
+ this.button4.TabIndex = 16;
+ this.button4.Text = "患者数据上传";
+ this.button4.UseVisualStyleBackColor = true;
+ this.button4.Click += new System.EventHandler(this.button4_Click);
+ //
+ // label6
+ //
+ this.label6.AutoSize = true;
+ this.label6.Location = new System.Drawing.Point(129, 111);
+ this.label6.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(87, 16);
+ this.label6.TabIndex = 27;
+ this.label6.Text = "截图数量:";
+ //
+ // lab_Time
+ //
+ this.lab_Time.AutoSize = true;
+ this.lab_Time.Location = new System.Drawing.Point(116, 74);
+ this.lab_Time.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.lab_Time.Name = "lab_Time";
+ this.lab_Time.Size = new System.Drawing.Size(87, 16);
+ this.lab_Time.TabIndex = 13;
+ this.lab_Time.Text = "00:00:00";
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(25, 74);
+ this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(87, 16);
+ this.label2.TabIndex = 12;
+ this.label2.Text = "录制时间:";
+ //
+ // btn_EndVideo
+ //
+ this.btn_EndVideo.Location = new System.Drawing.Point(255, 23);
+ this.btn_EndVideo.Margin = new System.Windows.Forms.Padding(2);
+ this.btn_EndVideo.Name = "btn_EndVideo";
+ this.btn_EndVideo.Size = new System.Drawing.Size(112, 32);
+ this.btn_EndVideo.TabIndex = 11;
+ this.btn_EndVideo.Text = "停止录像(F8)";
+ this.btn_EndVideo.UseVisualStyleBackColor = true;
+ this.btn_EndVideo.Click += new System.EventHandler(this.btn_EndVideo_Click);
+ //
+ // btn_PauseVideo
+ //
+ this.btn_PauseVideo.Location = new System.Drawing.Point(132, 23);
+ this.btn_PauseVideo.Margin = new System.Windows.Forms.Padding(2);
+ this.btn_PauseVideo.Name = "btn_PauseVideo";
+ this.btn_PauseVideo.Size = new System.Drawing.Size(119, 32);
+ this.btn_PauseVideo.TabIndex = 10;
+ this.btn_PauseVideo.Text = "暂停录像(F7)";
+ this.btn_PauseVideo.UseVisualStyleBackColor = true;
+ this.btn_PauseVideo.Click += new System.EventHandler(this.btn_PauseVideo_Click);
+ //
+ // btn_StartVideo
+ //
+ this.btn_StartVideo.Location = new System.Drawing.Point(15, 23);
+ this.btn_StartVideo.Margin = new System.Windows.Forms.Padding(2);
+ this.btn_StartVideo.Name = "btn_StartVideo";
+ this.btn_StartVideo.Size = new System.Drawing.Size(113, 32);
+ this.btn_StartVideo.TabIndex = 9;
+ this.btn_StartVideo.Text = "开始录像(F6)";
+ this.btn_StartVideo.UseVisualStyleBackColor = true;
+ this.btn_StartVideo.Click += new System.EventHandler(this.btn_StartVideo_Click);
+ //
+ // groupBox2
+ //
+ this.groupBox2.Controls.Add(this.button5);
+ this.groupBox2.Controls.Add(this.txt_h);
+ this.groupBox2.Controls.Add(this.lab_h);
+ this.groupBox2.Controls.Add(this.txt_w);
+ this.groupBox2.Controls.Add(this.lab_w);
+ this.groupBox2.Controls.Add(this.txt_y);
+ this.groupBox2.Controls.Add(this.lab_y);
+ this.groupBox2.Controls.Add(this.txt_x);
+ this.groupBox2.Controls.Add(this.lab_x);
+ this.groupBox2.Controls.Add(this.checkBox1);
+ this.groupBox2.Controls.Add(this.label5);
+ this.groupBox2.Controls.Add(this.label4);
+ this.groupBox2.Controls.Add(this.button3);
+ this.groupBox2.Controls.Add(this.button2);
+ this.groupBox2.Dock = System.Windows.Forms.DockStyle.Top;
+ this.groupBox2.Font = new System.Drawing.Font("宋体", 12F);
+ this.groupBox2.Location = new System.Drawing.Point(3, 17);
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.Size = new System.Drawing.Size(556, 140);
+ this.groupBox2.TabIndex = 18;
+ this.groupBox2.TabStop = false;
+ this.groupBox2.Text = "病理";
+ //
+ // button5
+ //
+ this.button5.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.button5.Location = new System.Drawing.Point(388, 98);
+ this.button5.Margin = new System.Windows.Forms.Padding(2);
+ this.button5.Name = "button5";
+ this.button5.Size = new System.Drawing.Size(127, 31);
+ this.button5.TabIndex = 30;
+ this.button5.Text = "图片转换成DCM";
+ this.button5.UseVisualStyleBackColor = true;
+ this.button5.Visible = false;
+ this.button5.Click += new System.EventHandler(this.button5_Click);
+ //
+ // txt_h
+ //
+ this.txt_h.Location = new System.Drawing.Point(487, 25);
+ this.txt_h.Name = "txt_h";
+ this.txt_h.Size = new System.Drawing.Size(28, 26);
+ this.txt_h.TabIndex = 25;
+ //
+ // lab_h
+ //
+ this.lab_h.AutoSize = true;
+ this.lab_h.Location = new System.Drawing.Point(466, 31);
+ this.lab_h.Name = "lab_h";
+ this.lab_h.Size = new System.Drawing.Size(15, 16);
+ this.lab_h.TabIndex = 24;
+ this.lab_h.Text = "h";
+ //
+ // txt_w
+ //
+ this.txt_w.Location = new System.Drawing.Point(430, 25);
+ this.txt_w.Name = "txt_w";
+ this.txt_w.Size = new System.Drawing.Size(28, 26);
+ this.txt_w.TabIndex = 23;
+ //
+ // lab_w
+ //
+ this.lab_w.AutoSize = true;
+ this.lab_w.Location = new System.Drawing.Point(409, 31);
+ this.lab_w.Name = "lab_w";
+ this.lab_w.Size = new System.Drawing.Size(15, 16);
+ this.lab_w.TabIndex = 22;
+ this.lab_w.Text = "w";
+ //
+ // txt_y
+ //
+ this.txt_y.Location = new System.Drawing.Point(377, 25);
+ this.txt_y.Name = "txt_y";
+ this.txt_y.Size = new System.Drawing.Size(28, 26);
+ this.txt_y.TabIndex = 21;
+ //
+ // lab_y
+ //
+ this.lab_y.AutoSize = true;
+ this.lab_y.Location = new System.Drawing.Point(356, 31);
+ this.lab_y.Name = "lab_y";
+ this.lab_y.Size = new System.Drawing.Size(15, 16);
+ this.lab_y.TabIndex = 20;
+ this.lab_y.Text = "y";
+ //
+ // txt_x
+ //
+ this.txt_x.Location = new System.Drawing.Point(319, 25);
+ this.txt_x.Name = "txt_x";
+ this.txt_x.Size = new System.Drawing.Size(28, 26);
+ this.txt_x.TabIndex = 19;
+ //
+ // lab_x
+ //
+ this.lab_x.AutoSize = true;
+ this.lab_x.Location = new System.Drawing.Point(298, 28);
+ this.lab_x.Name = "lab_x";
+ this.lab_x.Size = new System.Drawing.Size(15, 16);
+ this.lab_x.TabIndex = 18;
+ this.lab_x.Text = "x";
+ //
+ // checkBox1
+ //
+ this.checkBox1.AutoSize = true;
+ this.checkBox1.Location = new System.Drawing.Point(145, 27);
+ this.checkBox1.Name = "checkBox1";
+ this.checkBox1.Size = new System.Drawing.Size(154, 20);
+ this.checkBox1.TabIndex = 17;
+ this.checkBox1.Text = "是否开启区域截图";
+ this.checkBox1.UseVisualStyleBackColor = true;
+ this.checkBox1.Click += new System.EventHandler(this.checkBox1_Click);
+ //
+ // label5
+ //
+ this.label5.AutoSize = true;
+ this.label5.Location = new System.Drawing.Point(239, 66);
+ this.label5.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(15, 16);
+ this.label5.TabIndex = 16;
+ this.label5.Text = "0";
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(142, 66);
+ this.label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(87, 16);
+ this.label4.TabIndex = 16;
+ this.label4.Text = "截图数量:";
+ //
+ // button3
+ //
+ this.button3.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.button3.Location = new System.Drawing.Point(19, 59);
+ this.button3.Margin = new System.Windows.Forms.Padding(2);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(112, 31);
+ this.button3.TabIndex = 16;
+ this.button3.Text = "上传";
+ this.button3.UseVisualStyleBackColor = true;
+ this.button3.Click += new System.EventHandler(this.button3_Click);
+ //
+ // button2
+ //
+ this.button2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.button2.Location = new System.Drawing.Point(19, 24);
+ this.button2.Margin = new System.Windows.Forms.Padding(2);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(109, 31);
+ this.button2.TabIndex = 16;
+ this.button2.Text = "开启截图";
+ this.button2.UseVisualStyleBackColor = true;
+ this.button2.Click += new System.EventHandler(this.button2_Click);
+ //
+ // groupBox3
+ //
+ this.groupBox3.Controls.Add(this.groupBox1);
+ this.groupBox3.Controls.Add(this.gb_ButtonBox);
+ this.groupBox3.Controls.Add(this.groupBox2);
+ this.groupBox3.Dock = System.Windows.Forms.DockStyle.Left;
+ this.groupBox3.Location = new System.Drawing.Point(0, 0);
+ this.groupBox3.Name = "groupBox3";
+ this.groupBox3.Size = new System.Drawing.Size(562, 994);
+ this.groupBox3.TabIndex = 19;
+ this.groupBox3.TabStop = false;
+ this.groupBox3.Text = "操作";
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.dGVPatient);
+ this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.groupBox1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.groupBox1.Location = new System.Drawing.Point(3, 361);
+ 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(556, 630);
+ this.groupBox1.TabIndex = 19;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "患者信息";
+ //
+ // dGVPatient
+ //
+ this.dGVPatient.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ this.dGVPatient.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+ this.Column1,
+ this.name,
+ this.sex,
+ this.age,
+ this.jianchamingcheng,
+ this.kaifangsi});
+ this.dGVPatient.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.dGVPatient.Location = new System.Drawing.Point(2, 21);
+ this.dGVPatient.Name = "dGVPatient";
+ this.dGVPatient.ReadOnly = true;
+ this.dGVPatient.RowTemplate.Height = 23;
+ this.dGVPatient.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
+ this.dGVPatient.Size = new System.Drawing.Size(552, 607);
+ this.dGVPatient.TabIndex = 0;
+ this.dGVPatient.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dGVPatient_CellDoubleClick);
+ //
+ // Column1
+ //
+ this.Column1.DataPropertyName = "jianchaid";
+ this.Column1.HeaderText = "检查ID";
+ this.Column1.Name = "Column1";
+ this.Column1.ReadOnly = true;
+ //
+ // name
+ //
+ this.name.DataPropertyName = "name";
+ this.name.HeaderText = "姓名";
+ this.name.Name = "name";
+ this.name.ReadOnly = true;
+ this.name.Width = 70;
+ //
+ // sex
+ //
+ this.sex.DataPropertyName = "sex";
+ this.sex.HeaderText = "性别";
+ this.sex.Name = "sex";
+ this.sex.ReadOnly = true;
+ this.sex.Width = 70;
+ //
+ // age
+ //
+ this.age.DataPropertyName = "age";
+ this.age.HeaderText = "年龄";
+ this.age.Name = "age";
+ this.age.ReadOnly = true;
+ this.age.Width = 70;
+ //
+ // jianchamingcheng
+ //
+ this.jianchamingcheng.DataPropertyName = "jianchamingcheng";
+ this.jianchamingcheng.HeaderText = "检查项目";
+ this.jianchamingcheng.Name = "jianchamingcheng";
+ this.jianchamingcheng.ReadOnly = true;
+ //
+ // kaifangsi
+ //
+ this.kaifangsi.DataPropertyName = "kaifangsj";
+ this.kaifangsi.HeaderText = "日期";
+ this.kaifangsi.Name = "kaifangsi";
+ this.kaifangsi.ReadOnly = true;
+ //
+ // gb_CameraPanel
+ //
+ this.gb_CameraPanel.Controls.Add(this.vsp_Panel);
+ this.gb_CameraPanel.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.gb_CameraPanel.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.gb_CameraPanel.Location = new System.Drawing.Point(562, 0);
+ this.gb_CameraPanel.Margin = new System.Windows.Forms.Padding(2);
+ this.gb_CameraPanel.Name = "gb_CameraPanel";
+ this.gb_CameraPanel.Padding = new System.Windows.Forms.Padding(2);
+ this.gb_CameraPanel.Size = new System.Drawing.Size(1153, 994);
+ this.gb_CameraPanel.TabIndex = 20;
+ this.gb_CameraPanel.TabStop = false;
+ this.gb_CameraPanel.Text = "拍摄";
+ //
+ // vsp_Panel
+ //
+ this.vsp_Panel.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.vsp_Panel.Location = new System.Drawing.Point(2, 21);
+ this.vsp_Panel.Margin = new System.Windows.Forms.Padding(2);
+ this.vsp_Panel.Name = "vsp_Panel";
+ this.vsp_Panel.Size = new System.Drawing.Size(1149, 971);
+ this.vsp_Panel.TabIndex = 1;
+ this.vsp_Panel.VideoSource = null;
+ //
+ // backgroundWorker1
+ //
+ this.backgroundWorker1.WorkerReportsProgress = true;
+ this.backgroundWorker1.WorkerSupportsCancellation = true;
+ this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
+ this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
+ //
+ // video
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1715, 994);
+ this.Controls.Add(this.gb_CameraPanel);
+ this.Controls.Add(this.groupBox3);
+ this.DoubleBuffered = true;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Margin = new System.Windows.Forms.Padding(2);
+ this.Name = "video";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "视频采集";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.gb_ButtonBox.ResumeLayout(false);
+ this.gb_ButtonBox.PerformLayout();
+ this.groupBox2.ResumeLayout(false);
+ this.groupBox2.PerformLayout();
+ this.groupBox3.ResumeLayout(false);
+ this.groupBox1.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.dGVPatient)).EndInit();
+ this.gb_CameraPanel.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ private System.Windows.Forms.ComboBox cb_CameraSelect;
+ private System.Windows.Forms.Button btn_Capture;
+ private System.Windows.Forms.Button btn_Close;
+ private System.Windows.Forms.GroupBox gb_ButtonBox;
+ private System.Windows.Forms.Button btn_EndVideo;
+ private System.Windows.Forms.Button btn_PauseVideo;
+ private System.Windows.Forms.Button btn_StartVideo;
+ private System.Windows.Forms.Button btn_Connect;
+ private System.Windows.Forms.Label lab_Time;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.GroupBox groupBox2;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.Label label5;
+ private System.Windows.Forms.TextBox txt_h;
+ private System.Windows.Forms.Label lab_h;
+ private System.Windows.Forms.TextBox txt_w;
+ private System.Windows.Forms.Label lab_w;
+ private System.Windows.Forms.TextBox txt_y;
+ private System.Windows.Forms.Label lab_y;
+ private System.Windows.Forms.TextBox txt_x;
+ private System.Windows.Forms.Label lab_x;
+ private System.Windows.Forms.CheckBox checkBox1;
+ private System.Windows.Forms.GroupBox groupBox3;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.GroupBox gb_CameraPanel;
+ private AForge.Controls.VideoSourcePlayer vsp_Panel;
+ private System.Windows.Forms.DataGridView dGVPatient;
+ private System.Windows.Forms.DataGridViewTextBoxColumn Column1;
+ private System.Windows.Forms.DataGridViewTextBoxColumn name;
+ private System.Windows.Forms.DataGridViewTextBoxColumn sex;
+ private System.Windows.Forms.DataGridViewTextBoxColumn age;
+ private System.Windows.Forms.DataGridViewTextBoxColumn jianchamingcheng;
+ private System.Windows.Forms.DataGridViewTextBoxColumn kaifangsi;
+ private System.Windows.Forms.Button button4;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label6;
+ private System.ComponentModel.BackgroundWorker backgroundWorker1;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Button button5;
+ private System.Windows.Forms.Button button6;
+ }
+}
+
diff --git a/video.cs b/video.cs
new file mode 100644
index 0000000..56ebd5b
--- /dev/null
+++ b/video.cs
@@ -0,0 +1,1734 @@
+
+using AForge.Imaging;
+using AForge.Video.FFMPEG;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Configuration;
+using System.Data;
+using System.Diagnostics;
+using System.Drawing;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Runtime.InteropServices;
+using System.Security.Policy;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Controls;
+using System.Windows.Forms;
+using System.Windows.Shapes;
+using static AForge.Imaging.Filters.HitAndMiss;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement;
+
+namespace videoGather
+{
+ public partial class video : Form
+ {
+ public video()
+ {
+ InitializeComponent();
+ }
+ #region 属性
+ ///
+ /// 设备源
+ /// 用来操作摄像头
+ ///
+ private AForge.Video.DirectShow.VideoCaptureDevice videoCapture;
+ ///
+ /// 摄像头设备集合
+ ///
+ private AForge.Video.DirectShow.FilterInfoCollection infoCollection;
+ ///
+ /// 图片
+ ///
+ private System.Drawing.Bitmap imgMap;
+ ///
+ /// 文件保存路径
+ ///
+ private readonly string filePath = Application.StartupPath + @"\";
+ ///
+ /// 文件名称
+ ///
+ private readonly string fileName = $"{DateTime.Now.ToString("yyyyMMddhhmmssffff")}";
+ ///
+ /// 用与把每一帧图像写入到视频文件
+ ///
+ private AForge.Video.FFMPEG.VideoFileWriter videoWriter;
+ ///
+ /// 是否开始录像
+ ///
+ private bool IsStartVideo = false;
+ ///
+ /// 写入次数
+ ///
+ private int tick_num = 0;
+ ///
+ /// 录制多少小时,只是为了定时间计算录制时间使用
+ ///
+ private int Hour = 0;
+ ///
+ /// 计时器
+ ///
+ private System.Timers.Timer timer_count;
+ ///
+ /// 视频保存名称
+ ///
+ private string videoName = string.Empty;
+ ///
+ /// 路径地址
+ ///
+ private string _url = string.Empty;
+
+ private string _path = string.Empty;
+ ///
+ /// 当前类型
+ ///
+ private string _type = string.Empty;
+ ///
+ /// 病理截图临时存放位置
+ ///
+ private string _blpath = string.Empty;
+ ///
+ /// 病理访问前缀
+ ///
+ private string _blprefix = string.Empty;
+ ///
+ /// 病理截图热键
+ ///
+ private string strkey = string.Empty;
+ ///
+ /// 区域截图设置
+ ///
+ private string _xywh = string.Empty;
+
+ ///
+ /// 文件上传模式
+ ///
+ private string _model = string.Empty;
+ //超声存放文件访问地址
+ ArrayList imagearray = new ArrayList();
+ ///
+ /// 存放双击选择的患者数据
+ ///
+ private HisInfo rowhisinfo;
+ ///
+ /// 存放自己新增的数据源
+ ///
+ List hisInfos = new List();
+ #endregion
+
+ #region 窗口加载与关闭
+ ///
+ /// 讲题加载事件
+ ///
+ ///
+ ///
+ private void Form1_Load(object sender, EventArgs e)
+ {
+
+ dGVPatient.AutoGenerateColumns = false;
+
+ InitCamera();
+ InitCameraSelect();
+ //读取配置信息
+ _url = ConfigurationManager.AppSettings["URL"];
+ _path = ConfigurationManager.AppSettings["path"];
+ _type = ConfigurationManager.AppSettings["type"];
+ _blpath = ConfigurationManager.AppSettings["blpath"];
+ strkey = ConfigurationManager.AppSettings["strkey"];
+ _blprefix = ConfigurationManager.AppSettings["blprefix"];
+ _xywh = ConfigurationManager.AppSettings["xywh"];
+ _model = ConfigurationManager.AppSettings["model"];
+ if (_type == "1")
+ {
+
+ gb_ButtonBox.Visible = true;
+ groupBox2.Visible = false;
+ }
+ else if (_type == "2")
+ {
+
+ gb_ButtonBox.Visible = false;
+ groupBox2.Visible = true;
+
+ txt_x.Enabled = false;
+ txt_y.Enabled = false;
+ txt_w.Enabled = false;
+ txt_h.Enabled = false;
+ txt_x.Text = _xywh.Split(',')[0];
+ txt_y.Text = _xywh.Split(',')[1];
+ txt_w.Text = _xywh.Split(',')[2];
+ txt_h.Text = _xywh.Split(',')[3];
+ }
+ this.btn_Capture.Enabled = false;
+
+
+ //秒表
+ timer_count = new System.Timers.Timer(); //实例化Timer类,设置间隔时间为1000毫秒;
+ timer_count.Elapsed += new System.Timers.ElapsedEventHandler(tick_count); //到达时间的时候执行事件;
+ timer_count.AutoReset = true; //设置是执行一次(false)还是一直执行(true);
+ timer_count.Interval = 1000;
+ HookStart();
+ btn_Connect_Click(null, null);
+ GetHisInfo();
+ label4.Focus();
+ }
+ ///
+ /// 窗口关闭时
+ ///
+ ///
+ ///
+ private void Form1_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ EndCamera();
+ }
+ #endregion
+
+ #region 实例化
+ ///
+ /// 实例化摄像头
+ ///
+ public void InitCamera()
+ {
+ try
+ {
+ //检测电脑上的摄像头设备
+ infoCollection = new AForge.Video.DirectShow.FilterInfoCollection(AForge.Video.DirectShow.FilterCategory.VideoInputDevice);
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show($"没有找到设备:{ex.Message}", "Error");
+ }
+
+ }
+ //加载摄像头选择
+ public void InitCameraSelect()
+ {
+ this.cb_CameraSelect.DropDownStyle = ComboBoxStyle.DropDownList;
+ //根据读取到的摄像头加载选择项
+ foreach (AForge.Video.DirectShow.FilterInfo item in infoCollection)
+ {
+ this.cb_CameraSelect.Items.Add(item.Name);
+ }
+ //for (int i = 1; i <= infoCollection.Count; i++)
+ //{
+ // this.cb_CameraSelect.Items.Add("摄像头" + i);
+ //}
+ if (cb_CameraSelect.Items.Count > 0)
+ {
+ cb_CameraSelect.SelectedIndex = 0;
+ }
+
+ }
+ #endregion
+
+ #region 连接读取与关闭
+ ///
+ /// 连接按钮
+ ///
+ ///
+ ///
+ private void btn_Connect_Click(object sender, EventArgs e)
+ {
+ var CameraSelect = this.cb_CameraSelect.Text;
+ var selectIndex = this.cb_CameraSelect.SelectedIndex;
+ if (string.IsNullOrEmpty(CameraSelect))
+ {
+ MessageBox.Show("请先选择视频源");
+ return;
+ }
+ //已有连接的摄像头时先关闭
+ if (videoCapture != null)
+ {
+ EndCamera();
+ }
+ videoCapture = new AForge.Video.DirectShow.VideoCaptureDevice(infoCollection[selectIndex].MonikerString);
+ //启动摄像头
+ this.vsp_Panel.VideoSource = videoCapture;
+ this.vsp_Panel.Start();
+ this.btn_Capture.Enabled = true;
+ }
+ ///
+ /// 关闭按钮
+ ///
+ ///
+ ///
+ private void btn_Close_Click(object sender, EventArgs e)
+ {
+ HookStop();
+ EndCamera();
+ }
+ ///
+ /// 关闭摄像头
+ ///
+ public void EndCamera()
+ {
+ if (this.vsp_Panel.VideoSource != null)
+ {
+ //也可以用 Stop() 方法关闭
+ //指示灯停止且等待
+ this.vsp_Panel.SignalToStop();
+ //停止且等待
+ this.vsp_Panel.WaitForStop();
+ this.vsp_Panel.VideoSource = null;
+
+ }
+ }
+ #endregion
+
+ #region 拍照与保存
+ ///
+ /// 拍照
+ ///
+ ///
+ ///
+ private void btn_Capture_Click(object sender, EventArgs e)
+ {
+ if (videoCapture == null)
+ {
+ MessageBox.Show("设备未连接");
+ return;
+ }
+ imgMap = this.vsp_Panel.GetCurrentVideoFrame();
+ if (imgMap == null)
+ {
+ return;
+ }
+ var saveName = $"{filePath}{$"{DateTime.Now.ToString("yyyyMMddhhmmssffff")}"}.jpg";
+ imgMap.Save(saveName);
+ imagearray.Add(saveName);
+ label1.Text = imagearray.Count.ToString();
+ }
+ ///
+ /// 保存事件
+ ///
+ ///
+ ///
+ private void btn_Save_Click(object sender, EventArgs e)
+ {
+
+
+
+ }
+ #endregion
+
+ #region 录像
+ ///
+ /// 开始录像
+ ///
+ ///
+ ///
+ private void btn_StartVideo_Click(object sender, EventArgs e)
+ {
+ if (videoCapture == null)
+ {
+ MessageBox.Show("设备未连接");
+ return;
+ }
+ if (rowhisinfo == null)
+ {
+ MessageBox.Show("请选择患者");
+ return;
+ }
+ btn_StartVideo.Enabled = false;
+ videoName = $"{filePath}{fileName}.mp4";
+ IsStartVideo = true;
+ //开始计时
+ timer_count.Enabled = true;
+ //配置录像参数(宽,高,帧率,比特率等参数)VideoCapabilities这个属性会返回摄像头支持哪些配置,从这里面选一个赋值接即可
+ videoCapture.VideoResolution = videoCapture.VideoCapabilities[0];
+ //设置回调,aforge会不断从这个回调推出图像数据
+ videoCapture.NewFrame += Camera_NewFrame;
+ videoWriter = new AForge.Video.FFMPEG.VideoFileWriter();
+ //打开摄像头
+ //videoCapture.Start();
+ int videoBitrate = 5000000; // 1000 Kbps
+ //打开录像文件(如果没有则创建,如果有也会清空),这里还有关于视频宽高、帧率、格式、比特率
+ videoWriter.Open(
+ videoName,
+ videoCapture.VideoResolution.FrameSize.Width,
+ videoCapture.VideoResolution.FrameSize.Height,
+ videoCapture.VideoResolution.AverageFrameRate,
+ AForge.Video.FFMPEG.VideoCodec.MPEG4,
+ videoBitrate
+ );
+ }
+ //this.lab_Time
+ //摄像头输出回调
+ private void Camera_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
+ {
+ imgMap = eventArgs.Frame;
+ lock (imgMap)
+ {
+ if (eventArgs != null && eventArgs.Frame != null)
+ {
+ try
+ {
+ //写到文件
+ videoWriter.WriteVideoFrame(eventArgs.Frame);
+ }
+ catch (Exception ex)
+ {
+ //MessageBox.Show("写入文件错误"+ex.Message);
+ }
+ }
+ }
+ }
+ ///
+ /// 暂停录像
+ ///
+ ///
+ ///
+ private void btn_PauseVideo_Click(object sender, EventArgs e)
+ {
+ if (videoCapture == null)
+ {
+ MessageBox.Show("设备未连接");
+ return;
+ }
+ var stopBtnName = this.btn_PauseVideo.Text;
+ if (stopBtnName == "暂停录像")
+ {
+ this.btn_PauseVideo.Text = "恢复录像";
+ //暂停计时
+ timer_count.Enabled = false;
+ IsStartVideo = false;
+ }
+ if (stopBtnName == "恢复录像")
+ {
+ this.btn_PauseVideo.Text = "暂停录像";
+ //恢复计时
+ timer_count.Enabled = true;
+ IsStartVideo = true;
+ }
+ }
+ ///
+ /// 停止录像
+ ///
+ ///
+ ///
+ private void btn_EndVideo_Click(object sender, EventArgs e)
+ {
+ if (videoCapture == null)
+ {
+ MessageBox.Show("设备未连接");
+ return;
+ }
+ btn_StartVideo.Enabled = true;
+ IsStartVideo = false;
+ timer_count.Enabled = false;
+ if (videoWriter != null)
+ {
+ videoWriter.Close();
+ }
+
+ tick_num = 0;
+
+
+ }
+ #endregion
+
+ #region 计时器响应函数
+ ///
+ /// 计时器
+ ///
+ ///
+ ///
+ public void tick_count(object source, System.Timers.ElapsedEventArgs e)
+ {
+ tick_num++;
+ int Temp = tick_num;
+ int Second = Temp % 60;
+ int Minute = Temp / 60;
+ if (Minute % 60 == 0)
+ {
+ Hour = Minute / 60;
+ Minute = 0;
+ }
+ else
+ {
+ Minute = Minute - Hour * 60;
+ }
+ string HourStr = Hour < 10 ? $"0{Hour}" : Hour.ToString();
+ string MinuteStr = Minute < 10 ? $"0{Minute}" : Minute.ToString();
+ string SecondStr = Second < 10 ? $"0{Second}" : Second.ToString();
+ String tick = $"{HourStr}:{MinuteStr}:{SecondStr}";
+ this.Invoke((EventHandler)(delegate
+ {
+ this.lab_Time.Text = tick;
+ }));
+ }
+ #endregion
+
+ ///
+ /// 视频上传
+ ///
+ ///
+ ///
+ private void button1_Click(object sender, EventArgs e)
+ {
+
+
+
+ }
+
+ #region 请求接口
+
+ private void UploadFileUrl(string filename, string filetype)
+ {
+ if (!string.IsNullOrEmpty(filename) && !string.IsNullOrEmpty(filetype))
+ {
+ string imgType = "1";//1图片2 视频
+ string ID = string.Empty;
+ string imagebase = string.Empty;
+ string imgDescription = "超声图像";
+ string orgId = string.Empty;
+ if (filetype == ".mp4")
+ {
+ imgType = "2";
+ imgDescription = "超声视频";
+
+ }
+ imagebase = _path + @"/" + rowhisinfo.jianchaid + "/" + filename;
+ ID = rowhisinfo.jianchaid;
+ orgId = rowhisinfo.yiyuancode;
+ insimagescreenshotVO vO = new insimagescreenshotVO();
+ vO.id = ID;
+ vO.imagebase = imagebase;
+ vO.imgDescription = imgDescription;
+ vO.imgType = imgType;
+ vO.orgId = orgId;
+ var json = JsonConvert.SerializeObject(vO);
+ string msg = Post(_url + "/admin-api/ultrasoniccom/ultrasonic/insimagescreenshot", json);
+ }
+ }
+
+
+
+ ///
+ /// 指定Post地址使用Get 方式获取全部字符串
+ ///
+ /// 请求后台地址
+ /// Post提交数据内容(utf-8编码的)
+ ///
+ public static string Post(string url, string content)
+ {
+ string result = "";
+ try
+ {
+ HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
+ req.Method = "POST";
+ req.ContentType = "application/json";
+
+ #region 添加Post 参数
+ byte[] data = Encoding.UTF8.GetBytes(content);
+ req.ContentLength = data.Length;
+ using (Stream reqStream = req.GetRequestStream())
+ {
+ reqStream.Write(data, 0, data.Length);
+ reqStream.Close();
+ }
+ #endregion
+
+ HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
+ Stream stream = resp.GetResponseStream();
+ //获取响应内容
+ using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
+ {
+ result = reader.ReadToEnd();
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message);
+ }
+
+ return result;
+ }
+
+ ///
+ /// 指定Post地址使用Get 方式获取全部字符串
+ ///
+ /// 请求后台地址
+ /// Post提交数据内容(utf-8编码的)
+ ///
+ public static string Post(string url, string content, string headerKey, string headerValue)
+ {
+ string result = "";
+ try
+ {
+ HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
+ req.Method = "POST";
+ req.ContentType = "application/json";
+ req.Headers[headerKey] = headerValue;
+ #region 添加Post 参数
+ byte[] data = Encoding.UTF8.GetBytes(content);
+ req.ContentLength = data.Length;
+ using (Stream reqStream = req.GetRequestStream())
+ {
+ reqStream.Write(data, 0, data.Length);
+ reqStream.Close();
+ }
+ #endregion
+
+ HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
+ Stream stream = resp.GetResponseStream();
+ //获取响应内容
+ using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
+ {
+ result = reader.ReadToEnd();
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message);
+ }
+
+ return result;
+ }
+
+ ///
+ /// Get请求
+ ///
+ /// 请求url
+ ///
+ public static string Get(string url)
+ {
+ try
+ {
+ HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
+ req.Method = "GET";
+ req.Timeout = 30000;
+
+
+ if (req == null || req.GetResponse() == null)
+ {
+ MessageBox.Show("请求对象为空");
+ return string.Empty;
+ }
+
+ HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
+ if (resp == null)
+ {
+ MessageBox.Show("响应对象为空");
+ return string.Empty;
+ }
+
+ using (var stream = resp.GetResponseStream())
+ using (var reader = new StreamReader(stream, Encoding.UTF8))
+ {
+ var content = new StringBuilder();
+ char[] buffer = new char[1024];
+ int read;
+ while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
+ {
+ content.Append(new string(buffer, 0, read));
+ }
+ return content.ToString();
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show("发生错误: " + ex.Message);
+ return string.Empty;
+ }
+ }
+
+ ///
+ /// Get请求
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static string Get(string url, string headerKey, string headerValue)
+ {
+ try
+ {
+ HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
+ req.Method = "GET";
+ req.Timeout = 30000;
+
+ req.Headers[headerKey] = headerValue;
+
+ if (req == null || req.GetResponse() == null)
+ {
+ MessageBox.Show("请求对象为空");
+ return string.Empty;
+ }
+
+ HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
+ if (resp == null)
+ {
+ MessageBox.Show("响应对象为空");
+ return string.Empty;
+ }
+
+ using (var stream = resp.GetResponseStream())
+ using (var reader = new StreamReader(stream, Encoding.UTF8))
+ {
+ var content = new StringBuilder();
+ char[] buffer = new char[1024];
+ int read;
+ while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
+ {
+ content.Append(new string(buffer, 0, read));
+ }
+ return content.ToString();
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show("发生错误: " + ex.Message);
+ return string.Empty;
+ }
+
+ }
+ ///
+ /// 获取HIS患者信息
+ ///
+ public void GetHisInfo()
+ {
+ //存放绑定界面的患者数据 一个患者有多个检查 按照检查拆分 一个检查一条数据
+ List hisInfos = new List();
+ //获取福乐云HIS接口的token
+ string hisToken = getHisToken(ConfigurationManager.AppSettings["hisGetTokenUrl"], ConfigurationManager.AppSettings["hisAppkey"], ConfigurationManager.AppSettings["appsecret"]);
+
+ //获取当天的患者信息
+ FlyHisEcgDataModel FHEDM = GetHisEcgData(ConfigurationManager.AppSettings["hisGetDataUrl"], ConfigurationManager.AppSettings["inHisCode"], DateTime.Now.ToString("yyyy-MM-dd"), hisToken);//
+ if (FHEDM != null)
+ {
+ foreach (patientInfo item in FHEDM.rows)
+ {
+ foreach (projectsInfo projectsInfo in item.projects)
+ {
+ if (projectsInfo.category == "US")
+ {
+ HisInfo info = new HisInfo();
+ info.jianchaid = item.jianchaid;
+ info.name = item.name;
+ info.jianchabh = item.jianchabh;
+ info.sfz = item.sfz;
+ info.birthdate = item.birthdate;
+ info.age = item.age;
+ info.sex = item.sex;
+ info.yiyuanname = item.yiyuanname;
+ info.yiyuanid = item.yiyuanid;
+ info.yiyuancode = item.yiyuancode;
+ info.kaifangsj = item.kaifangsj;
+ info.departmentCode = item.departmentCode;
+ info.departmentName = item.departmentName;
+ info.resDoctorName = item.resDoctorName;
+ info.resDoctorCode = item.resDoctorCode;
+ info.nation = item.nation;
+ info.patientCode = item.patientCode;
+ info.visitType = item.visitType;
+ info.jianchamingcheng = projectsInfo.jianchamingcheng;
+ info.nhbm = projectsInfo.nhbm;
+ info.category = projectsInfo.category;
+ hisInfos.Add(info);
+ }
+
+ }
+ }
+ dGVPatient.DataSource = hisInfos;
+ rowhisinfo = null;
+ }
+ }
+
+
+ ///
+ /// 获取福乐云HIS系统的token
+ ///
+ ///
+ ///
+ ///
+ public string getHisToken(string url1, string appkey, string appsecret)
+ {
+ Dictionary dic = new Dictionary();
+ dic.Add("appkey", appkey);
+ dic.Add("appsecret", appsecret);
+
+ string resultV = PostFile3(url1, dic);
+ FlyHisTokenMsgModel tm = JsonConvert.DeserializeObject(resultV);
+ return tm.data.access_token;
+ }
+
+ ///
+ /// 获取福乐云HIS系统的患者基本信息
+ ///
+ ///
+ ///
+ ///
+ public FlyHisEcgDataModel GetHisEcgData(string url1, string Yiyuanid, string kaifangsj, string token)
+ {
+ Dictionary dic = new Dictionary();
+ dic.Add("Yiyuanid", Yiyuanid);
+ dic.Add("dateStart", kaifangsj);
+ dic.Add("dateEnd", kaifangsj);
+ dic.Add("token", token);
+ string resultV = PostFile3(url1, dic);
+ FlyHisEcgDataModel tm = JsonConvert.DeserializeObject(resultV);
+ return tm;
+ }
+
+
+
+ ///
+ /// post form-data 参数
+ ///
+ ///
+ ///
+ ///
+ public string PostFile3(string url, Dictionary items)
+ {
+ string boundary = DateTime.Now.Ticks.ToString("x");
+ HttpWebRequest request = null;
+ //如果是发送HTTPS请求
+ if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
+ {
+ //处理HttpWebRequest访问https有安全证书的问题( 请求被中止: 未能创建 SSL/TLS 安全通道。)
+ ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, sslPolicyErrors) => true;
+ ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
+
+ //ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
+ request = WebRequest.Create(url) as HttpWebRequest;
+ request.ProtocolVersion = HttpVersion.Version10;
+ }
+ else
+ {
+ request = WebRequest.Create(url) as HttpWebRequest;
+ }
+
+ request.ContentType = "multipart/form-data; boundary=" + boundary;
+ request.Method = "POST";
+ // request.Headers.Add("Authorization", "Bearer " + token);
+ // 最后的结束符
+ var endBoundary = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
+
+ //文件数据
+ string fileFormdataTemplate =
+ "--" + boundary +
+ "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"" +
+ "\r\nContent-Type: application/octet-stream" +
+ "\r\n\r\n";
+
+ //文本数据
+ string dataFormdataTemplate =
+ "\r\n--" + boundary +
+ "\r\nContent-Disposition: form-data; name=\"{0}\"" +
+ "\r\n\r\n{1}";
+ //FileInfo fi = new FileInfo(filePath);
+ //string fileHeader = string.Format(fileFormdataTemplate, "file", fi.Name);
+ //var fileBytes = Encoding.UTF8.GetBytes(fileHeader);
+
+ using (var postStream = new MemoryStream())
+ {
+ ////写入文件格式串
+ //postStream.Write(fileBytes, 0, fileBytes.Length);
+
+ //#region 写入文件流
+ //using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
+ //{
+ // byte[] buffer = new byte[1024];
+ // int bytesRead = 0;
+ // while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) != 0)
+ // {
+ // postStream.Write(buffer, 0, bytesRead);
+ // }
+ //}
+ //#endregion
+
+ #region 写入其他表单参数
+ foreach (KeyValuePair key in items)
+ {
+ var p = string.Format(dataFormdataTemplate, key.Key, key.Value);
+ var bp = Encoding.UTF8.GetBytes(p);
+ postStream.Write(bp, 0, bp.Length);
+ }
+ #endregion
+
+ //写入结束边界
+ postStream.Write(endBoundary, 0, endBoundary.Length);
+
+ #region 写入流
+
+ request.ContentLength = postStream.Length;
+ postStream.Position = 0;
+ using (Stream ds = request.GetRequestStream())
+ {
+ byte[] buffer = new byte[1024];
+ int bytesRead = 0;
+ while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) != 0)
+ {
+ ds.Write(buffer, 0, bytesRead);
+ }
+ }
+ #endregion
+
+ #region 获取返回值
+
+ string result = string.Empty;
+ using (HttpWebResponse rep = (HttpWebResponse)request.GetResponse())
+ {
+ using (Stream ds = rep.GetResponseStream())
+ {
+ using (StreamReader sr = new StreamReader(ds))
+ {
+ result = sr.ReadToEnd();
+ }
+ }
+ }
+
+ return result;
+
+ #endregion
+ }
+ }
+ #endregion
+
+ #region 视频转换
+
+ ///
+ /// 转换文件
+ ///
+ ///
+ /// 转换后文件
+ private string ConvertVideo(string filename)
+ {
+ Process p = new Process();
+
+ p.StartInfo.FileName = Application.StartupPath + @"\ffmpeg\" + "ffmpeg";
+
+ //p.StartInfo.FileName = path + "ffmpeg.exe";
+
+ p.StartInfo.UseShellExecute = false;
+ string srcFileName = "";
+ srcFileName = "\"" + filename + "\"";
+ string destFileName = Application.StartupPath + "\\" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".mp4";
+ //-preset:指定编码的配置。x264编码算法有很多可供配置的参数,
+ //不同的参数值会导致编码的速度大相径庭,甚至可能影响质量。
+ //为了免去用户了解算法,然后手工配置参数的麻烦。x264提供了一些预设值,
+ //而这些预设值可以通过preset指定。这些预设值有包括:
+ //ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow和placebo。
+ //ultrafast编码速度最快,但压缩率低,生成的文件更大,placebo则正好相反。x264所取的默认值为medium。
+ //需要说明的是,preset主要是影响编码的速度,并不会很大的影响编码出来的结果的质量。
+ //-crf:这是最重要的一个选项,用于指定输出视频的质量,取值范围是0-51,默认值为23,数字越小输出视频的质量越高。
+ //这个选项会直接影响到输出视频的码率。一般来说,压制480p我会用20左右,压制720p我会用16-18,1080p我没尝试过。
+ //个人觉得,一般情况下没有必要低于16。最好的办法是大家可以多尝试几个值,每个都压几分钟,看看最后的输出质量和文件大小,自己再按需选择。
+ p.StartInfo.Arguments = "-i " + srcFileName + " -y -vcodec h264 -threads " + 1 + " -crf " + 25 + " " + "\"" + destFileName + "\""; //执行参数
+
+ p.StartInfo.UseShellExecute = false; ////不使用系统外壳程序启动进程
+ p.StartInfo.CreateNoWindow = true; //不显示dos程序窗口
+
+ p.StartInfo.RedirectStandardInput = true;
+
+ p.StartInfo.RedirectStandardOutput = true;
+
+ p.StartInfo.RedirectStandardError = true;//把外部程序错误输出写到StandardError流中
+
+ p.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived);
+
+ p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
+
+ p.StartInfo.UseShellExecute = false;
+
+ p.Start();
+
+ p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
+
+ p.BeginErrorReadLine();//开始异步读取
+
+ p.WaitForExit();//阻塞等待进程结束
+
+ p.Close();//关闭进程
+
+ p.Dispose();//释放资源
+
+ return destFileName.TrimStart('\\');
+
+ }
+
+ private static void p_ErrorDataReceived(object sender, DataReceivedEventArgs e)
+ {
+ //WriteLog(e.Data);
+ }
+
+ private static void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
+ {
+
+ //WriteLog(e.Data);
+
+ }
+ #endregion
+
+ #region 病理相关
+ ///
+ /// 开启或关闭全局监测
+ ///
+ ///
+ ///
+ private void button2_Click(object sender, EventArgs e)
+ {
+ var CameraSelect = this.cb_CameraSelect.Text;
+ if (string.IsNullOrEmpty(CameraSelect))
+ {
+ MessageBox.Show("请先选择视频源");
+ return;
+ }
+ if (button2.Text == "开启截图")
+ {
+ HookStart();
+ button2.Text = "关闭截图";
+ }
+ else if (button2.Text == "关闭截图")
+ {
+ HookStop();
+ button2.Text = "开启截图";
+ }
+
+ }
+ ///
+ /// 保存病理截图并且转换成dcm
+ ///
+ private void SaveImageDcm()
+ {
+ Bitmap currentFrame = this.vsp_Panel.GetCurrentVideoFrame();
+ if (currentFrame != null)
+ {
+ //开启区域截图
+ if (checkBox1.Checked)
+ {
+ int x = int.Parse(txt_x.Text.Trim());
+ int y = int.Parse(txt_y.Text.Trim());
+ int w = int.Parse(txt_w.Text.Trim());
+ int h = int.Parse(txt_h.Text.Trim());
+ // 定义你想要裁剪的区域 imgMap
+ System.Drawing.Rectangle region = new System.Drawing.Rectangle(x, y, w, h); // 例如,从(10,10)开始,宽100,高100的区域
+
+ // 裁剪图像区域
+ imgMap = currentFrame.Clone(region, currentFrame.PixelFormat);
+ }
+ else
+ {
+ imgMap = currentFrame;
+ }
+
+ bool bol = Imaganddcm.ImportImage("123456", "2", "3", "测试", imgMap, _blpath);
+ if (bol)
+ {
+ label5.Text = Imaganddcm.Array.Count.ToString();
+ imgMap.Dispose();
+ currentFrame.Dispose();
+ }
+ }
+ }
+ ///
+ /// 上传病理dcm并且传递数据
+ ///
+ ///
+ ///
+ private void button3_Click(object sender, EventArgs e)
+ {
+ //给当前患者创建FTP路径
+ FtpHelper.MakeDir("123456");
+ //读取当前患者截图文件上传FTP
+ string[] filePaths = Directory.GetFiles(_blpath);
+ if (!filePaths.Any())
+ {
+ MessageBox.Show("文件为空");
+ return;
+
+ }
+ //存放文件访问地址
+ ArrayList arrayList = new ArrayList();
+ foreach (string filePath in filePaths)
+ {
+ string fileName = System.IO.Path.GetFileName(filePath);
+ string returnStr = FtpHelper.FileUpLoad(filePath, "123456", fileName);//上传文件
+ arrayList.Add("123456" + "/" + fileName);
+ File.Delete(filePath);
+ }
+ //调用患者信息接口
+ //先获取token
+ string msg = Get(_url + "/admin-api/system/jwtToken/getToken?key_public=c4c7dde887706361d8480909043bfdbd");
+ if (!string.IsNullOrEmpty(msg))
+ {
+ MsgInfo person = JsonConvert.DeserializeObject(msg);
+ if (person != null)
+ {
+ InsPatientInfo(person.data);
+
+ InsImageInfo(person.data, arrayList);
+
+ MessageBox.Show("上传成功");
+ Imaganddcm.Array.Clear();
+ label5.Text = "0";
+ }
+
+ }
+ }
+ ///
+ /// 插入患者信息
+ ///
+ ///
+ private void InsPatientInfo(string token)
+ {
+ string strjson = @"[
+ {
+ ""examId"": ""1234567"",
+ ""pname"": ""病理测试插入患者"",
+ ""gender"": ""男"",
+ ""birthday"": ""1727075391000"",
+ ""deviceType"": ""CSH1"",
+ ""deviceName"": ""设备测试12"",
+ ""seDc"": """",
+ ""examDate"": ""1727075391000"",
+ ""examItemCode"": ""Z0000000210"",
+ ""examItemName"": ""病理"",
+ ""reportstatus"": ""待分析"",
+ ""applicationDate"": ""1727075391000"",
+ ""orgId"": ""9f65555c-ce59-4f4c-8f1c-af245ebe5ce6"",
+ ""orgName"": ""科右前旗康立寿医院"",
+ ""regId"": ""123456""
+ }
+ ]";
+ string msg = Post(_url + "/admin-api/tblist/patientexamlist/addPatientExamInfo", strjson, "AuthToken", token);
+
+ }
+ ///
+ /// 插入影像数据
+ ///
+ ///
+ ///
+ private void InsImageInfo(string token, ArrayList arrayList)
+ {
+ if (arrayList != null)
+ {
+
+ int count = 0;
+ List images = new List();
+ foreach (string str in arrayList)
+ {
+ count++;
+ image imageInfo = new image();
+ imageInfo.ImageNumber = count.ToString();
+ imageInfo.ObjectFile = str;
+ imageInfo.UrlPrefix = _blprefix;
+ images.Add(imageInfo);
+
+ }
+ Series series = new Series
+ {
+ SeriesNumb = "1",
+ SeriesDesc = "病理",
+ Modality = "CSH1",
+ image = images
+ };
+
+ //检查项目信息
+ Study study = new Study
+ {
+ StudyDescr = "病理",
+ StudyID = "Z0000000033",
+ StudyModal = "CSH1",
+ Series = new List { series }
+ };
+ //患者信息
+ Patient patient = new Patient
+ {
+ PatientID = "123456",
+ PatientNam = "病理测试插入患者",
+ PatientBir = "511200000000",
+ PatientSex = "F",
+ OrgId = "9f65555c-ce59-4f4c-8f1c-af245ebe5ce6",
+ OrgName = "测试插入1",
+ StudyDate = "2024-9-20 13:03:30",
+ Studies = new List { study }
+ };
+ List patientList = new List();
+ patientList.Add(patient);
+ // 将对象转换为JSON字符串
+ string json = JsonConvert.SerializeObject(patientList);
+
+ string msg = Post(_url + "/admin-api/ultrasoniccom/ultrasonic/InsImageInfo", json, "AuthToken", token);
+ }
+
+
+
+
+ }
+ #endregion
+
+ #region 钩子相关
+ //定义变量
+ public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);
+ static int hKeyboardHook = 0;
+ HookProc KeyboardHookProcedure;
+
+ /*************************
+ * 声明API函数
+ * ***********************/
+
+ // 安装钩子 (using System.Runtime.InteropServices;)
+ [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
+ public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
+ // 卸载钩子
+ [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
+ public static extern bool UnhookWindowsHookEx(int idHook);
+ // 继续下一个钩子
+ [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
+ public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam);
+ // 取得当前线程编号(线程钩子需要用到)
+ [DllImport("kernel32.dll")]
+ static extern int GetCurrentThreadId();
+
+ //钩子子程:就是钩子所要做的事情
+ private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
+ {
+ if (nCode >= 0)
+ {
+ /****************
+ //线程键盘钩子判断是否按下键
+ Keys keyData = (Keys)wParam;
+ if(lParam.ToInt32() > 0)
+ {
+ // 键盘按下
+ }
+ if(lParam.ToInt32() < 0)
+ {
+ // 键盘抬起
+ }
+ ****************/
+
+ /****************
+ //全局键盘钩子判断是否按下键
+ wParam = = 0x100 // 键盘按下
+ wParam = = 0x101 // 键盘抬起
+ ****************/
+ KeyMSG m = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG));//键盘
+ Keys key = (Keys)m.vkCode;
+ if (wParam == 0x100) // WM_KEYDOWN
+ {
+ string keyString = key.ToString();
+ // MessageBox.Show(keyString);
+
+ if (keyString == strkey)
+ {
+ SaveImageDcm();
+ }
+ switch (keyString)
+ {
+ case "F6":
+ if (!IsStartVideo)
+ {
+ btn_StartVideo_Click(null, null);
+ }
+ break;
+ case "F7":
+ btn_PauseVideo_Click(null, null);
+ break;
+ case "F8":
+ if (IsStartVideo)
+ {
+ btn_EndVideo_Click(null, null);
+ }
+ break;
+ case "F9":
+ btn_Capture_Click(null, null);
+ break;
+
+ }
+ // MessageBox.Show("Key down: " + key.ToString());
+
+ }
+ else if (wParam == 0x101) // WM_KEYUP
+ {
+ // MessageBox.Show("Key up: " + key.ToString());
+ }
+
+
+ // return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
+ return 0;//如果返回1,则结束消息,这个消息到此为止,不再传递。如果返回0或调用CallNextHookEx函数则消息出了这个钩子继续往下传递,也就是传给消息真正的接受者
+ }
+ return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
+ }
+
+ //键盘结构
+ public struct KeyMSG
+ {
+ public int vkCode; //键值
+ public int scanCode;
+ public int flags;
+ public int time;
+ public int dwExtraInfo;
+ }
+ // 安装钩子
+ public void HookStart()
+ {
+ if (hKeyboardHook == 0)
+ {
+ // 创建HookProc实例
+ KeyboardHookProcedure = new HookProc(KeyboardHookProc);
+ // 设置线程钩子
+
+ hKeyboardHook = SetWindowsHookEx(13, KeyboardHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);
+
+ //************************************
+ //键盘线程钩子
+ //SetWindowsHookEx( 2,KeyboardHookProcedure, IntPtr.Zero, GetCurrentThreadId());
+ //键盘全局钩子,需要引用空间(using System.Reflection;)
+ //SetWindowsHookEx( 13,KeyboardHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0);
+ //
+ //关于SetWindowsHookEx (int idHook, HookProc lpfn, IntPtr hInstance, int threadId)函数将钩子加入到钩子链表中,说明一下四个参数:
+ //idHook 钩子类型,即确定钩子监听何种消息,上面的代码中设为2,即监听键盘消息并且是线程钩子,如果是全局钩子监听键盘消息应设为13,
+ //线程钩子监听鼠标消息设为7,全局钩子监听鼠标消息设为14。
+ //
+ //lpfn 钩子子程的地址指针。如果dwThreadId参数为0 或是一个由别的进程创建的线程的标识,lpfn必须指向DLL中的钩子子程。 除此以外,lpfn可
+ //以指向当前进程的一段钩子子程代码。钩子函数的入口地址,当钩子钩到任何消息后便调用这个函数。
+ //
+ //hInstance应用程序实例的句柄。标识包含lpfn所指的子程的DLL。如果threadId 标识当前进程创建的一个线程,而且子程代码位于当前
+ //进程,hInstance必须为NULL。可以很简单的设定其为本应用程序的实例句柄。
+ //
+ //threadedId 与安装的钩子子程相关联的线程的标识符。如果为0,钩子子程与所有的线程关联,即为全局钩子。
+ //************************************
+
+
+ // 如果设置钩子失败
+ if (hKeyboardHook == 0)
+ {
+ HookStop();
+ throw new Exception("SetWindowsHookEx failed.");
+ }
+ }
+ }
+ // 卸载钩子
+ public void HookStop()
+ {
+ bool retKeyboard = true;
+ if (hKeyboardHook != 0)
+ {
+ retKeyboard = UnhookWindowsHookEx(hKeyboardHook);
+ hKeyboardHook = 0;
+ }
+ if (!(retKeyboard))
+ throw new Exception("UnhookWindowsHookEx failed.");
+ }
+
+
+ #endregion
+ ///
+ /// 是否开启区域截图
+ ///
+ ///
+ ///
+ private void checkBox1_Click(object sender, EventArgs e)
+ {
+ if (!checkBox1.Checked)
+ {
+ txt_x.Enabled = false;
+ txt_y.Enabled = false;
+ txt_w.Enabled = false;
+ txt_h.Enabled = false;
+ }
+ else
+ {
+ txt_x.Enabled = true;
+ txt_y.Enabled = true;
+ txt_w.Enabled = true;
+ txt_h.Enabled = true;
+ }
+ }
+ ///
+ /// 双击患者列 选中患者
+ ///
+ ///
+ ///
+ private void dGVPatient_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
+ {
+ // 检查是否双击了整行
+ if (e.RowIndex >= 0) // 确保是行内的单元格被双击
+ {
+ // 获取当前行的所有单元格
+ DataGridViewRow row = dGVPatient.Rows[e.RowIndex];
+ rowhisinfo = (HisInfo)row.DataBoundItem;
+ label3.Text = "双击选择患者" + " 当前患者:" + rowhisinfo.name;
+
+
+ }
+ }
+ ///
+ /// 患者数据上传
+ ///
+ ///
+ ///
+ private void button4_Click(object sender, EventArgs e)
+ {
+ if (rowhisinfo == null)
+ {
+ MessageBox.Show("请选择患者");
+ return;
+ }
+ if (imagearray.Count <= 0 && string.IsNullOrEmpty(videoName))
+ {
+ MessageBox.Show("暂无需要上传的患者和文件");
+ return;
+ }
+ this.backgroundWorker1.RunWorkerAsync(); // 运行 backgroundWorker 组件
+
+ ProcessForm form = new ProcessForm(this.backgroundWorker1);// 显示进度条窗体
+ form.ShowDialog(this);
+ form.Close();
+ MessageBox.Show("上传成功");
+ }
+
+
+ #region 线程执行
+
+ private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
+ {
+ if (e.Error != null)
+ {
+ MessageBox.Show(e.Error.Message);
+ }
+ else if (e.Cancelled)
+ {
+ }
+ else
+ {
+ }
+ }
+
+ //你可以在这个方法内,实现你的调用,方法等。
+ private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
+ {
+ BackgroundWorker worker = sender as BackgroundWorker;
+
+ //上传图片
+ #region 上传图片
+
+ string returnStr = string.Empty;
+ foreach (var item in imagearray)
+ {
+ string fileName = System.IO.Path.GetFileName(item.ToString());
+ if (_model == "0")
+ {
+ returnStr = SaveFile(item.ToString(), ConfigurationManager.AppSettings["filepath"] + "\\" + rowhisinfo.jianchaid, fileName.Split('.')[0], "jpg");
+ }
+ else
+ {
+ returnStr = FtpHelper.FileUpLoad(item.ToString(), ConfigurationManager.AppSettings["path1"], fileName);//上传文件
+ }
+
+ if (!string.IsNullOrEmpty(returnStr) && returnStr == "上传成功")
+ {
+ //上传成功 清除文件
+ try
+ {
+ UploadFileUrl(fileName, ".jpg");
+ // 删除文件
+ File.Delete(item.ToString());
+ worker.ReportProgress(10);
+ }
+ catch (IOException ex)
+ {
+ MessageBox.Show("删除文件时出错: " + ex.Message);
+ return;
+ }
+ catch (UnauthorizedAccessException ex)
+ {
+ MessageBox.Show("没有权限删除文件: " + ex.Message);
+ return;
+ }
+
+ }
+ }
+
+ #endregion
+
+ #region 上传视频
+ if (!string.IsNullOrEmpty(videoName))
+ {
+ bool fileExists = File.Exists(videoName);
+ if (fileExists)
+ {
+ string newfilename = ConvertVideo(videoName);
+ if (_model == "0")
+ {
+ returnStr = SaveFile(newfilename, ConfigurationManager.AppSettings["filepath"] + "\\" + rowhisinfo.jianchaid, fileName, "mp4");
+ }
+ else
+ {
+ returnStr = FtpHelper.FileUpLoad(newfilename, ConfigurationManager.AppSettings["path1"], fileName + ".mp4");//上传文件
+ }
+
+ if (!string.IsNullOrEmpty(returnStr) && returnStr == "上传成功")
+ {
+ //上传成功 清除文件
+ try
+ {
+ UploadFileUrl(fileName + ".mp4", ".mp4");
+ // 删除文件
+ File.Delete(videoName);
+ // 删除文件
+ File.Delete(newfilename);
+ worker.ReportProgress(10);
+ }
+ catch (IOException ex)
+ {
+ MessageBox.Show("删除文件时出错: " + ex.Message);
+ return;
+ }
+ catch (UnauthorizedAccessException ex)
+ {
+ MessageBox.Show("没有权限删除文件: " + ex.Message);
+ return;
+ }
+ this.Invoke(new Action(() =>
+ {
+ tick_num = 0;
+ lab_Time.Text = "00:00:00";
+ }));
+ }
+ }
+ }
+
+ #endregion
+
+ #region 插入患者
+ worker.ReportProgress(70);
+ string token = Get(_url + "/admin-api/system/jwtToken/getToken?key_public=c4c7dde887706361d8480909043bfdbd");
+ if (!string.IsNullOrEmpty(token))
+ {
+ MsgInfo person = JsonConvert.DeserializeObject(token);
+ List Record = new List();
+
+ ExamRecord examRecord = new ExamRecord();
+ examRecord.examId = rowhisinfo.jianchabh + "_" + GetRandomNumber(1, 100);
+ examRecord.pname = rowhisinfo.name;
+ examRecord.gender = rowhisinfo.sex;
+ examRecord.birthday = GetTimestampFromBirthdate(rowhisinfo.birthdate).ToString();
+ examRecord.deviceType = "US";//rowhisinfo.category
+ examRecord.deviceName = "彩超";
+ examRecord.seDc = "1/1";
+ examRecord.examDate = GetTimestampFromdate(rowhisinfo.kaifangsj).ToString();
+ examRecord.examItemName = rowhisinfo.jianchamingcheng;
+ examRecord.examItemCode = rowhisinfo.nhbm;
+ examRecord.reportstatus = "待分析";
+ examRecord.applicationDate = GetTimestampFromdate(rowhisinfo.kaifangsj).ToString();
+ examRecord.orgId = rowhisinfo.yiyuancode;//9f65555c-ce59-4f4c-8f1c-af245ebe5ce6 rowhisinfo.yiyuanid
+ examRecord.orgName = rowhisinfo.yiyuanname;
+ examRecord.regId = rowhisinfo.jianchaid;
+ Record.Add(examRecord);
+
+
+ var json = JsonConvert.SerializeObject(Record);
+ string msg = Post(_url + "/admin-api/tblist/patientexamlist/addPatientExamInfo", json, "AuthToken", person.data);
+ worker.ReportProgress(100);
+ this.Invoke(new Action(() =>
+ {
+ //截图数量置为0
+ label1.Text = "0";
+ //选择患者置为空
+ rowhisinfo = null;
+ imagearray.Clear();
+ videoName = string.Empty;
+ label3.Text = "双击选择患者";
+ }));
+
+ }
+
+ #endregion
+
+ }
+ #endregion
+
+
+
+
+ private void gb_ButtonBox_Enter(object sender, EventArgs e)
+ {
+
+ }
+
+ public static int GetRandomNumber(int minValue, int maxValue)
+ {
+ Random random = new Random(); // 实例化Random类
+ return random.Next(minValue, maxValue); // 返回一个随机整数
+ }
+
+ // 获取当前时间的Unix时间戳(毫秒)
+ public static string GetCurrentTimestamp()
+ {
+ // DateTime.UtcNow 获取当前UTC时间
+ // Subtract 方法减去1970年1月1日的时间
+ // TotalMilliseconds 获取总毫秒数
+ return DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalMilliseconds.ToString();
+ }
+
+ // 将指定的出生日期转换为Unix时间戳(毫秒)
+ public static long GetTimestampFromBirthdate(string birthdate)
+ {
+
+ // 尝试解析日期字符串
+ DateTime birthDateTime;
+ if (DateTime.TryParseExact(birthdate, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out birthDateTime))
+ {
+ // 将本地时间转换为UTC时间
+ DateTime birthDateTimeUtc = birthDateTime.ToUniversalTime();
+ // 计算时间戳
+ TimeSpan elapsedTime = birthDateTimeUtc - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+ return (long)elapsedTime.TotalMilliseconds;
+ }
+ else
+ {
+ // 如果日期格式不正确,抛出异常
+ throw new ArgumentException("无效的日期格式。正确的格式应该是yyyy-MM-dd。");
+ }
+ }
+
+ public static long GetTimestampFromdate(string birthdate)
+ {
+
+ // 尝试解析日期字符串
+ DateTime birthDateTime;
+ if (DateTime.TryParseExact(birthdate, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out birthDateTime))
+ {
+
+ // 将本地时间转换为UTC时间
+ DateTime birthDateTimeUtc = birthDateTime.ToUniversalTime();
+ // 计算时间戳
+ return (long)birthDateTimeUtc.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
+ }
+ else
+ {
+ // 如果日期格式不正确,抛出异常或返回0
+ throw new ArgumentException("无效的日期格式。正确的格式应该是yyyy-MM-dd。");
+ // 或者返回0,取决于你希望如何处理错误
+ // return 0;
+ }
+ }
+ ///
+ /// 刷新患者
+ ///
+ ///
+ ///
+ private void button1_Click_1(object sender, EventArgs e)
+ {
+ GetHisInfo();
+ }
+
+ private void button5_Click(object sender, EventArgs e)
+ {
+ // 创建一个OpenFileDialog实例
+ OpenFileDialog openFileDialog = new OpenFileDialog();
+
+ try
+ {
+ // 设置OpenFileDialog的属性
+ openFileDialog.InitialDirectory = "C:\\"; // 初始目录
+ openFileDialog.Title = "请选择一个图像文件"; // 对话框标题
+ openFileDialog.Filter = "图像文件 (*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp"; // 文件过滤器
+
+ // 显示OpenFileDialog
+ if (openFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ // 获取选中的文件路径
+ string selectedFilePath = openFileDialog.FileName;
+ using (FileStream fs = new FileStream(selectedFilePath, FileMode.Open, FileAccess.Read))
+ {
+ using (Bitmap bitmap = new Bitmap(fs))
+ {
+ bool bol = Imaganddcm.ImportImage("M20241025", "202410253", "202410253", "树艳", bitmap, _blpath);
+ }
+ }
+
+
+ }
+ }
+ catch (Exception ex)
+ {
+ // 异常处理
+ Console.WriteLine("发生异常:" + ex.Message);
+ }
+
+ }
+
+ #region 调用接口上传文件
+ ///
+ /// 调用接口上传文件
+ ///
+ /// 文件所在的路径
+ /// 文件保存的文件夹路径
+ /// 文件名(不包含扩展名)
+ /// 文件扩展名(例如 "png", "jpg", "txt")
+ ///
+ private string SaveFile(string imageBase, string folderPath, string fileName, string extension)
+ {
+ string base64String = ConvertFileToBase64(imageBase);
+ if (string.IsNullOrEmpty(base64String))
+ {
+ return "文件为空";
+ }
+ SaveFile saveFile = new SaveFile();
+ saveFile.imagebase = base64String;
+ saveFile.folderPath = folderPath;
+ saveFile.fileName = fileName;
+ saveFile.extension = extension;
+
+ var json = JsonConvert.SerializeObject(saveFile);
+ string msg = Post(_url + "/admin-api/ultrasoniccom/ultrasonic/SaveFileBase64", json);
+ return msg;
+ }
+
+ ///
+ /// 文件转换成base64
+ ///
+ ///
+ ///
+ ///
+ private string ConvertFileToBase64(string filePath)
+ {
+ string base64String = string.Empty;
+ // 确保文件存在
+ if (File.Exists(filePath))
+ {
+ // 读取文件内容到字节数组中
+ byte[] fileBytes = File.ReadAllBytes(filePath);
+
+ // 将字节数组转换为Base64字符串
+ base64String = Convert.ToBase64String(fileBytes);
+ }
+ return base64String;
+ }
+ #endregion
+
+ ///
+ /// 添加患者
+ ///
+ ///
+ ///
+ private void button6_Click(object sender, EventArgs e)
+ {
+ InfoForm infoForm = new InfoForm();
+ if (infoForm.ShowDialog() == DialogResult.OK)
+ {
+ //先赋空再绑定
+ dGVPatient.DataSource=null;
+ hisInfos.Add(infoForm.info);
+ dGVPatient.DataSource = hisInfos;
+ rowhisinfo = null;
+ }
+ }
+ }
+
+}
diff --git a/video.resx b/video.resx
new file mode 100644
index 0000000..9a14eca
--- /dev/null
+++ b/video.resx
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ 17, 17
+
+
+
+
+ AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAADJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQoAAAAAAADJsQrJsQrJ
+ sQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrIsArJsQoAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJsQrIsArJsQoAAAAAAAAAAAAAAADJsQrJsQrJsQrJsQrIsAkA
+ AAAAAAAAAAAAAADJsQrIsArJsQoAAAAAAADJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQoAAAAAAADJ
+ sQrIsArJsQoAAADJsQrJsQoAAAAAAADJsQrJsQrJsQoAAAAAAADJsQrJsQoAAADJsQrIsArJsQoAAAAA
+ AADJsQoAAADJsQrJsQrJsQrJsQrJsQoAAADJsQoAAAAAAADJsQrIsArJsQoAAAAAAADJsQoAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADJsQoAAAAAAADJsQrIsArJsQoAAAAAAADJsQrJsQoAAADJsQrJsQrJsQoAAADJ
+ sQrJsQoAAAAAAADJsQrIsArJsQoAAAAAAAAAAADJsQoAAAAAAAAAAAAAAAAAAADJsQoAAAAAAAAAAADJ
+ sQrIsArJsQoAAAAAAAAAAADJsQrJsQrJsQrJsQrJsQrJsQrJsQoAAAAAAAAAAADJsQrIsArJsQoAAAAA
+ AAAAAAAAAADJsQrJsQrJsQrJsQrJsQrIrQkAAAAAAAAAAADJsQrIsArJsQoAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJsQoAAADJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJ
+ sQrJsQrJsQrJsQrJsQoAAAAAAADJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQrJsQoA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAQAAgAAAAD/+
+ AAA8HgAAMAYAACYyAAA0FgAAN/YAADImAAA77gAAOA4AADwOAAA//gAAgAAAAMABAAD//wAA
+
+
+
\ No newline at end of file
diff --git a/videoGather.csproj b/videoGather.csproj
new file mode 100644
index 0000000..d3673a3
--- /dev/null
+++ b/videoGather.csproj
@@ -0,0 +1,189 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {2990C129-31D9-4AA3-B10D-D2773F140FF4}
+ WinExe
+ videoGather
+ videoGather
+ v4.6.1
+ 512
+ true
+ true
+
+
+
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ false
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+ false
+
+
+ true
+ bin\x86\Debug\
+ DEBUG;TRACE
+ full
+ x86
+ 7.3
+ prompt
+ true
+
+
+ bin\x86\Release\
+ TRACE
+ true
+ pdbonly
+ x86
+ 7.3
+ prompt
+ true
+
+
+ 超声.ico
+
+
+
+ packages\AForge.2.2.5\lib\AForge.dll
+
+
+ packages\AForge.Controls.2.2.5\lib\AForge.Controls.dll
+
+
+ packages\AForge.Imaging.2.2.5\lib\AForge.Imaging.dll
+
+
+ packages\AForge.Math.2.2.5\lib\AForge.Math.dll
+
+
+ packages\AForge.Video.2.2.5\lib\AForge.Video.dll
+
+
+ packages\AForge.Video.DirectShow.2.2.5\lib\AForge.Video.DirectShow.dll
+
+
+ packages\AForge.Video.FFMPEG.2.2.5.1-rc\lib\AForge.Video.FFMPEG.dll
+
+
+ packages\fo-dicom.Desktop.4.0.0\lib\net45\Dicom.Core.dll
+
+
+ packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ InfoForm.cs
+
+
+
+
+
+ Form
+
+
+ ProcessForm.cs
+
+
+
+
+
+ Form
+
+
+ video.cs
+
+
+
+
+ InfoForm.cs
+
+
+ ProcessForm.cs
+
+
+ video.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/videoGather.sln b/videoGather.sln
new file mode 100644
index 0000000..7358064
--- /dev/null
+++ b/videoGather.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.10.34916.146
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "videoGather", "videoGather.csproj", "{2990C129-31D9-4AA3-B10D-D2773F140FF4}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {2990C129-31D9-4AA3-B10D-D2773F140FF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2990C129-31D9-4AA3-B10D-D2773F140FF4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2990C129-31D9-4AA3-B10D-D2773F140FF4}.Debug|x86.ActiveCfg = Debug|x86
+ {2990C129-31D9-4AA3-B10D-D2773F140FF4}.Debug|x86.Build.0 = Debug|x86
+ {2990C129-31D9-4AA3-B10D-D2773F140FF4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2990C129-31D9-4AA3-B10D-D2773F140FF4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2990C129-31D9-4AA3-B10D-D2773F140FF4}.Release|x86.ActiveCfg = Release|x86
+ {2990C129-31D9-4AA3-B10D-D2773F140FF4}.Release|x86.Build.0 = Release|x86
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {3E17FD25-7A81-4A33-875D-BBE10821FECA}
+ EndGlobalSection
+EndGlobal
diff --git a/超声.ico b/超声.ico
new file mode 100644
index 0000000000000000000000000000000000000000..5b15972f84b35e52473b288da23df9c22a41b6ea
GIT binary patch
literal 894
zcma)*K?=e!5Ji6x1YJm1;!0cC*b+hcRT*+BON(KQAwZ
zQlQ{nmf$+WaR5vKEIAor!5Q-I>v0|T8ItrNjk#Zfx%+hMlJvZ(zTJ_*ED}B@lUloC
zUV!EPG3!?t%axcXet%-hlhtw-39lAc4apU%j(H_*@;2V&R+xcF;+Mq80GxlHAj_N0
z7v#M#mit-~pJx+);@{*}04Gw1H?W@rt07R;z?whN<^|LhuzLdA3HzLZ3w+quG{6VB
C-r_9)
literal 0
HcmV?d00001
diff --git a/超声诊断仪.ico b/超声诊断仪.ico
new file mode 100644
index 0000000000000000000000000000000000000000..ea03ce8a1d8b0ae983aaa7fafb5468b779196cbe
GIT binary patch
literal 16958
zcmeHPJ8mO65aqyulf^3AXaO;taKjA@h}e_#5#|Q;U=PwqX)Wd;)DaXa5Y+o#Tf~&g
z?5?IPU@W`Kc&^{8M;2u}v~yqZ6@tTe@4o)y+#k-luK-H!8DM>|@Zy&5%L^(QcjhiNmOw7)+;eU28^jN|d;Z+Gn`L~b%%^AWfqS!n3zv4W_DCRb
z?+kAZyyHIap7)?nGwv$+jPKoQ_o?N-_xGvYrz&Rfqn!$D*$7r=f-%sK8No?);#73XaNu0+B^g!
zz;j9nsFzH0OB`9V_zlRK!#n{Vn6iLo1Ui6xqCfi@&8^;x`b`oKO(;s3kyiYx52o)Y2AE&{|QG3Y-GvqNFu1n&*Ufl04?x
z5(<)&V{#)901wa_fHn5|0upM{JQB^-oXppHxjyFS@B@Z5FDgOZPv|#_Q%VDhdX~Ag
z28rebNf5E-iB>V3%WpBQxn3wn(I;2-1Z_0z(8>DL%H|Q|diHH@7JTMpU!Yu+GB5j!
zrb;p=`&RWEtJ^>yWGs$IaSq;B|nC1uL0FQnIIv@d@Z-EGSV9ElT
z^
zS!=GAFZDVkaz4rC6|u+6TQ%i<7+Y4$mwEw-o{y4H88-#JP^qEsV~yAHwO)&Y*6^A%
zBj=3Pp?0ll4QsxZU((YW*W8;kQYRtzrNfMx)L?8`Ex)AKps001i8xXtSI@^0u2t4L
zx8{%Ob!f=5(-=|JJ@RX3mDG^RJ21AamOrK!(9l}f=G3~@^qH1UEq_X{MN{k5=G1tL
z>GLeDT7Ipb)}P7~#JzQZ(bxJ0{nh7X@vVLUfqUqCSUG1n`&QHESbDX5OYc|rYxk+;
z|LXm$^K19fd~Y4_j{5<3)B9N0?bHnOU=6*)KJQ%G#ky((f_}4)l1FR#b6>yPN7$b`
z%{33=M|uP9!kucZ!9WWnpuaQl&K=MIi!Cp(yuk7TuU?=x?A3rO7~}ovg&z+ueslKg
z{Y$>uZ>Vrw?IZnZwWsTQ>36Fkhtl9Nxn_Us+#~%n{=otK$*m6#{s@-atoDb8zTd7_
z`~7P7xL?6