本教程展示如何将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 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用户帐户设置为可以访问以下项目:
演示可以在< INSTALL_DIR > \ LEADTOOLS21 \ Bin \ Dotnet4 \ x64 \ CSStorageServerManagerDemo_Original.exe.
如果尚未配置,请使用对话框运行PACS配置演示来设置PACS存储服务器和服务。188金宝搏beat体育官网
在配置PACS数据库时,取消选中添加默认映像这样就可以使用本教程添加示例图像。如果已经添加,则可以按照下面的说明删除图像。
配置完成后,使用存储服务器管理器演示确保存储服务器已配置并运行:
存储服务器DICOM服务器设置可以从控制面板使用DICOM服务器按钮:
请确保在服务器设置中正确配置了用于连接存储服务器的客户端。的树可以找到客户端配置DICOM服务器在侧板。
本教程将使用客户端AEL21_CLIENT64初始化PACS时默认配置。
要从存储服务器中删除示例DICOM映像,请使用数据库管理器按钮,然后单击空数据库按钮。在文本框中输入任何需要的原因,启用复选框,单击“确定”。
在Visual Studio中,创建一个新的c# Windows WinForms项目,并添加以下必要的LEADTOOLS引用。
所需要的参考资料取决于项目的目的。引用可以通过以下两种方法中的一种添加(但不能同时添加)。
如果使用NuGet引用,本教程需要以下NuGet包:
Leadtools.Dicom.Pacs.Scu如果使用本地DLL引用,则需要以下DLL。
dll位于< INSTALL_DIR > \ LEADTOOLS21 \ Bin \ Dotnet4 \ x64:
Leadtools.dllLeadtools.Dicom.dllLeadtools.Dicom.Common.dllLeadtools.Dicom.Scu.dll有关应用程序需要哪些DLL文件的完整列表,请参阅你的申请中包含的文件.
许可证解锁项目所需的特性。它必须在调用任何工具箱函数之前设置。有关详细信息,包括针对不同平台的教程,请参阅设置运行时License.
有两种类型的运行时许可证:
请注意
中详细介绍了添加LEADTOOLS NuGet和本地引用以及设置许可添加引用和设置License教程。
随着项目的创建、引用的添加和许可的设置,编码就可以开始了。
在解决方案资源管理器,打开Form1.cs.右键单击设计窗口并选择视图代码,或按F7,以显示表单背后的代码。将下列语句添加到使用顶部的块:
//在顶部使用块使用Leadtools;使用Leadtools.Dicom;使用Leadtools.Dicom.Scu;使用Leadtools.Dicom.Scu.Common;使用系统;使用先;使用System.Net;使用System.Windows.Forms;
添加下面的全局变量。
//添加全局变量私人StoreScu _storeFile;私人DicomScp _scp;私人文本框_storeScuClientLog;
控件中添加一个新方法Form1类命名InitStoreScu ().方法中调用此方法Main ()方法。SetLicense ()调用。添加下面的代码来初始化StoreScu类。
私人无效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作为日志,并带有一个按钮,单击该按钮将启动存储文件通信。
私人无效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 ();}
使用下面的代码StoreScuButton_Click ()事件处理程序,该事件处理程序将开始与存储服务器通信,以存储示例DICOM图像,IMAGE1.dcm从示例图像文件夹:C: \ LEADTOOLS21 \ \ \日本\ image1.dcm图像资源
私人无效StoreScuButton_Click (对象发送者,EventArgs字符串文件名=@“C: \ LEADTOOLS21 \资源\ \日本\ image1.dcm图像”;DicomEngine.Startup ();DicomNet.Startup ();_storeScuClientLog。文本=“Dicom引擎启动”;_storeFile。存储(_scp,文件名);DicomNet.Shutdown ();DicomEngine.Shutdown ();_storeScuClientLog。文本+ =“Dicom引擎关闭”;}
使用下面的代码分别StoreScu事件处理程序:
| 事件 | 描述 |
|---|---|
ReceiveBuffer |
当连接接收到缓冲数据时发生,因此处理程序将记录接收到的字节数。 |
BeforeCStore |
在C-STORE-REQ命令发送到服务器之前发生,因此如果发生错误,处理程序将停止存储过程。 |
AfterCStore |
在从服务器接收到C-STORE-RSP命令后发生,因此处理程序将记录存储的完成并记录其状态。 |
ReceiveBuffer:私人无效storeFile_ReceiveBuffer (对象发送,接收buffereventargs{_storeScuClientLog。文本+ =Environment.NewLine + e.BufferSize +“接收的数据字节数”;}
BeforeCStore:私人无效storeFile_BeforeCStore (对象发送者,BeforeCStoreEventArgs{如果(e.Error ! =零){MessageBox.Show (e.Error.Message.ToString ());e.Skip = SkipMethod.AllFiles;}}
AfterCStore:私人无效storeFile_AfterCStore (对象发送者:AfterCStoreEventArgs{_storeScuClientLog。文本+ =Environment.NewLine + e.FileInfo.FullName +“存储完成。”+环境。换行符+“状态:”+ e.Status;}
按下运行项目F5,或选择Debug ->开始调试.
如果正确执行了上述步骤,则应用程序将运行,并允许用户与LEADTOOLS PACS存储服务器建立通信并使用StoreScu上传DICOM Image文件并将其存储到其数据库中。
方法添加必要的引用StoreScu而且DicomScp类来与LEADTOOLS存储服务器通信。