本教程展示如何将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.dll
Leadtools.Dicom.dll
Leadtools.Dicom.Common.dll
Leadtools.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存储服务器通信。