存储DICOM映像到PACS存储服务器- WinForms c#

本教程展示如何将DICOM映像存储到LEADTOOLS PACS存储服务器的数据库中。本教程还展示如何通过客户端应用程序建立与存储服务器的连接。

概述
总结 本教程介绍如何在WinForms c#应用程序中将DICOM映像存储到PACS存储服务器。
完成时间 30分钟
Visual Studio项目 下载教程项目(10kb)
平台 Windows WinForms c#应用程序
IDE Visual Studio 2019
开发许可 下载LEADTOOLS

所需的知识

步骤熟悉创建项目的基本步骤添加引用和设置License教程,在工作之前存储DICOM映像到PACS存储服务器- WinForms c#教程。

SQL Server

请注意

此应用程序至少需要SQL Server Express 2005或更新版本。

默认情况下,LEADTOOLS配置演示将LEADTOOLS Windows服务和188金宝搏beat体育官网web服务配置为LocalSystem(新界当局\系统)身份。这是一个特殊的内置帐户,具有对本地系统的完全访问权。SQL Server 2008 R2及更早的版本包含此帐户作为完全访问SQL Server的登录。微软认为这是一个安全漏洞,并从新版本的SQL Server中删除了登录。有关创建登录的更多信息,请参阅Microsoft主题,SQL Server -“创建登录”,在:

如果在SQL Server中启用,则可以使用SQL Server身份验证。如果使用SQL身份验证,在运行LEADTOOLS数据库配置演示之前,SQL登录必须已经存在。在添加SQL登录时,确保“必须更改密码”选项未选中(已清除)。创建SQL登录名和用户之后,连接到Visual Studio或SQL Server Management Studio中的数据库引擎进行测试。

使用Windows或SQL认证方式登录SQL Server。映射的用户必须具有正确的权限,才能执行配置工具和演示所需的功能。188金宝搏beat体育官网对于开发,将用户与系统管理员服务器角色和dbowner角色,是最快的方法,但由于明显的安全问题,不建议用于生产。

使用Windows身份验证需要Windows用户帐户、Windows用户帐户的SQL登录以及映射到与Windows用户帐户关联的SQL登录的SQL用户帐户。

确保Windows用户帐户设置为可以访问以下项目:

配置和运行LEADTOOLS PACS存储服务器管理器Demo

演示可以在< INSTALL_DIR > \ LEADTOOLS21 \ Bin \ Dotnet4 \ x64 \ CSStorageServerManagerDemo_Original.exe

如果尚未配置,请使用对话框运行PACS配置演示来设置PACS存储服务器和服务。188金宝搏beat体育官网

在配置PACS数据库时,取消选中添加默认映像这样就可以使用本教程添加示例图像。如果已经添加,则可以按照下面的说明删除图像。

配置完成后,使用存储服务器管理器演示确保存储服务器已配置并运行:

存储服务器正在运行。

存储服务器DICOM服务器设置可以从控制面板使用DICOM服务器按钮:

存储服务器配置。

请确保在服务器设置中正确配置了用于连接存储服务器的客户端。的树可以找到客户端配置DICOM服务器在侧板。

存储服务器客户端配置。

本教程将使用客户端AEL21_CLIENT64初始化PACS时默认配置。

要从存储服务器中删除示例DICOM映像,请使用数据库管理器按钮,然后单击空数据库按钮。在文本框中输入任何需要的原因,启用复选框,单击“确定”。

空存储服务器数据库。

创建项目并添加LEADTOOLS引用

在Visual Studio中,创建一个新的c# Windows WinForms项目,并添加以下必要的LEADTOOLS引用。

所需要的参考资料取决于项目的目的。引用可以通过以下两种方法中的一种添加(但不能同时添加)。

如果使用NuGet引用,本教程需要以下NuGet包:

如果使用本地DLL引用,则需要以下DLL。

dll位于< INSTALL_DIR > \ LEADTOOLS21 \ Bin \ Dotnet4 \ x64

有关应用程序需要哪些DLL文件的完整列表,请参阅你的申请中包含的文件

设置License文件

许可证解锁项目所需的特性。它必须在调用任何工具箱函数之前设置。有关详细信息,包括针对不同平台的教程,请参阅设置运行时License

有两种类型的运行时许可证:

请注意

中详细介绍了添加LEADTOOLS NuGet和本地引用以及设置许可添加引用和设置License教程。

初始化存储连接

随着项目的创建、引用的添加和许可的设置,编码就可以开始了。

解决方案资源管理器,打开Form1.cs.右键单击设计窗口并选择视图代码,或按F7,以显示表单背后的代码。将下列语句添加到使用顶部的块:

c#
//在顶部使用块使用Leadtools;使用Leadtools.Dicom;使用Leadtools.Dicom.Scu;使用Leadtools.Dicom.Scu.Common;使用系统;使用先;使用System.Net;使用System.Windows.Forms;

添加下面的全局变量。

c#
//添加全局变量私人StoreScu _storeFile;私人DicomScp _scp;私人文本框_storeScuClientLog;

控件中添加一个新方法Form1类命名InitStoreScu ().方法中调用此方法Main ()方法。SetLicense ()调用。添加下面的代码来初始化StoreScu类。

c#
私人无效InitStoreScu ()InitUI ();varip = IPAddress。解析(“0.0.0.0”);//更改IP到客户端机器_storeFile =StoreScu ();_scp =DicomScp ();//更改这些参数以反映调用AETitle。_storeFile。AETitle =“L21_CLIENT64”_storeFile。HostPort = 1040;_storeFile。HostAddress = ip;//更改这些参数以反映所调用的AETitle(存储服务器)。_scp。AETitle =“L21_PACS_SCP64”_scp。端口= 544;_scp。超时= 30;_scp。PeerAddress = _storeFile.HostAddress;//钩子事件处理程序_storeFile。ReceiveBuffer + =ReceiveBufferDelegate (storeFile_ReceiveBuffer);_storeFile。BeforeCStore + =BeforeCStoreDelegate (storeFile_BeforeCStore);_storeFile。AfterCStore+=AfterCStoreDelegate (storeFile_AfterCStore);//设置存储文件的压缩值_storeFile。压缩=压缩。无损;

初始化用户界面

添加一个名为InitUI ().方法的开头将调用此方法InitStoreScu ()方法,如上所示。添加下面的代码来初始化a文本框控件使用的控件。StoreScu作为日志,并带有一个按钮,单击该按钮将启动存储文件通信。

c#
私人无效InitUI ()//调整窗体大小.Width = 300;.高度= 328;//为StoreSCU和客户端应用添加一个文本框作为日志_storeScuClientLog =文本框();_storeScuClientLog。Name =“storeScuClientLog”_storeScuClientLog。位置=System.Drawing。12点(12日);_storeScuClientLog。宽度= 260;_storeScuClientLog。高度= 236;_storeScuClientLog。多行=真正的_storeScuClientLog。锚=(锚的样式。顶级|主播风格。底部|主播样式。左| AnchorStyles.Right);.Controls.Add (_storeScuClientLog);//添加一个Store按钮,当单击该按钮时,将开始存储文件通信varstoreScuButton =按钮();storeScuButton。Name =“storeScuButton”storeScuButton。锚=(锚的样式。底部|主播样式。左| AnchorStyles.Right);storeScuButton。位置=System.Drawing。点(254);storeScuButton。宽度= 260;storeScuButton。身高= 23;storeScuButton。文本=“将DICOM存储到存储服务器”storeScuButton。点击+= StoreScuButton_Click;.Controls.Add (storeScuButton);storeScuButton.BringToFront ();

添加StoreScu按钮代码

使用下面的代码StoreScuButton_Click ()事件处理程序,该事件处理程序将开始与存储服务器通信,以存储示例DICOM图像,IMAGE1.dcm从示例图像文件夹:C: \ LEADTOOLS21 \ \ \日本\ image1.dcm图像资源

c#
私人无效StoreScuButton_Click (对象发送者,EventArgs字符串文件名=@“C: \ LEADTOOLS21 \资源\ \日本\ image1.dcm图像”DicomEngine.Startup ();DicomNet.Startup ();_storeScuClientLog。文本=“Dicom引擎启动”_storeFile。存储(_scp,文件名);DicomNet.Shutdown ();DicomEngine.Shutdown ();_storeScuClientLog。文本+ =“Dicom引擎关闭”

添加C-STORE事件处理程序代码

使用下面的代码分别StoreScu事件处理程序:

事件 描述
ReceiveBuffer 当连接接收到缓冲数据时发生,因此处理程序将记录接收到的字节数。
BeforeCStore 在C-STORE-REQ命令发送到服务器之前发生,因此如果发生错误,处理程序将停止存储过程。
AfterCStore 在从服务器接收到C-STORE-RSP命令后发生,因此处理程序将记录存储的完成并记录其状态。

ReceiveBuffer:

c#
私人无效storeFile_ReceiveBuffer (对象发送,接收buffereventargs_storeScuClientLog。文本+ =Environment.NewLine + e.BufferSize +“接收的数据字节数”

BeforeCStore:

c#
私人无效storeFile_BeforeCStore (对象发送者,BeforeCStoreEventArgs如果(e.Error ! =MessageBox.Show (e.Error.Message.ToString ());e.Skip = SkipMethod.AllFiles;

AfterCStore:

c#
私人无效storeFile_AfterCStore (对象发送者:AfterCStoreEventArgs_storeScuClientLog。文本+ =Environment.NewLine + e.FileInfo.FullName +“存储完成。”+环境。换行符+“状态:”+ e.Status;

运行项目

按下运行项目F5,或选择Debug ->开始调试

如果正确执行了上述步骤,则应用程序将运行,并允许用户与LEADTOOLS PACS存储服务器建立通信并使用StoreScu上传DICOM Image文件并将其存储到其数据库中。

总结

方法添加必要的引用StoreScu而且DicomScp类来与LEADTOOLS存储服务器通信。

另请参阅

net
iOS
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2021领德科技有限公司版权所有。