本教程展示如何在生成的DICOM数据集中为服务对象对(SOP)实例生成和插入唯一标识符(UID)。
| 概述 | |
|---|---|
| 总结 | 本教程介绍了如何在c# Windows控制台应用程序中生成和插入SOPInstance UID。 |
| 完成时间 | 30分钟 |
| Visual Studio项目 | 下载教程项目(3kb) |
| 平台 | c# Windows控制台应用程序 |
| IDE | Visual Studio 2019 |
| 开发许可 | 下载LEADTOOLS |
步骤熟悉创建项目的基本步骤添加引用和设置License教程,在工作之前在医疗查看器中加载和显示DICOM图像- WinForms c#教程。
惟一标识符(uid)提供了惟一标识各种项目的功能。它们保证了跨多个国家、站点、供应商和设备的独特性。不同类别的对象、对象实例和信息实体可以在DICOM话语宇宙中彼此区分,而不受任何语义上下文的影响。
例如,不能使用相同的UID值同时识别该研究或不同研究中的研究实例(研究实例UID)和系列实例(系列实例UID)。还需要提醒实现者不要通过派生(例如通过添加后缀)从另一个实现分配的UID构建新的UID值。
每个UID由两个部分组成< org根>和一个> <后缀:UID =
本教程将展示如何> <后缀可以生成。这里的方法使用日期和时间派生唯一标识符。
注意< org根>“1.2.840.10008”是为DICOM定义的项(如DICOM传输语法)保留的,不能用于私有定义的项(如映像实例)。
本教程使用“1.2.840.10008”作为占位符,应该用有效的组织标识符替换。
有关DICOM唯一标识符的特定规则,请参阅另请参阅下面的部分。
在Visual Studio中,创建一个新的c# Windows控制台项目,并添加以下必要的LEADTOOLS引用。
所需要的参考资料取决于项目的目的。引用可以通过以下两种方法中的一种添加(但不能同时添加)。本项目需要参考资料如下:
如果使用NuGet引用,本教程需要以下NuGet包:
Leadtools.Dicom.Pacs.Scu如果使用本地DLL引用,则需要以下DLL。dll位于< INSTALL_DIR > \ LEADTOOLS22 \ Bin \ Dotnet4 \ x64:
Leadtools.dllLeadtools.Dicom.dll有关应用程序需要哪些DLL文件的完整列表,请参阅你的申请中包含的文件.
许可证解锁项目所需的特性。它必须在调用任何工具箱函数之前设置。有关包括针对不同平台的教程的详细信息,请参阅设置运行时License.
有两种类型的运行时许可证:
请注意
中更详细地介绍了添加LEADTOOLS引用和设置许可添加引用和设置License教程。
现在已经将LEADTOOLS引用添加到项目中,并设置了许可证,可以开始编码了。
在解决方案资源管理器,打开Program.cs并将以下内容添加到使用块,并设置全局变量orgroot.
//在顶部使用块使用系统;使用先;使用来;使用Leadtools;使用Leadtools.Dicom;
//添加全局变量静态字符串orgroot =“1.2.840.10008”;//将此更改为您组织的根值
调用这两个方法,GenerateNewUID(字符串orgroot)而且SetSOPInstancedUID(字符串uid),在主要方法。
静态无效主要(字符串[]参数){试一试{SetLicense ();//生成一个新的唯一标识符字符串uid = GenerateNewUID(或root);//设置唯一标识符为Dicom数据集SetSOPInstancedUID (uid);}抓(异常交货){Console.WriteLine (ex.Message);}}
使用下面的代码生成新的UID。
私人静态字符串GenerateNewUID (字符串orgroot){控制台。WriteLine ($"部分的UID: {orroot}" );//获取日期/时间varnow =日期时间。现在;//获取数字日期,不包含年份和确切的军事时间字符串zeroDate = now.Month.ToString() + now.Day.ToString() +“。”+ now.Hour.ToString() + now.Minute.ToString() + now.Second.ToString() + now. milliseconds . tostring ();//生成全局唯一标识符字符串guid =新字符串(Guid.NewGuid () .ToString()。(字符.IsDigit) .ToArray ());控制台。WriteLine ($"<后缀>部分的UID: {zeroDate}.{guid}");//组合字符串字符串sopUid = $”{orgroot}, {zeroDate}。{guid}”;//检查长度,看它是否超过64个字符,如果是,然后使用子字符串sopUid = sopUid。长度> 64 ?sopUid。Substring(0,64): sopUid;控制台。WriteLine ($“SOPInstanceUID: {sopUid}”);返回sopUid;}
使用下面的代码将生成的UID设置为DICOM数据集中的SOPInstanceUID。
私人静态无效SetSOPInstancedUID (字符串uid){//启动Dicom引擎DicomEngine.Startup ();DicomDataSet ds =新DicomDataSet ();//从数据集中移除所有项ds.Reset ();//创建数据集对象,插入指定类的适当元素。ds.Initialize (DicomClassType。SCImageStorage DicomDataSetInitializeFlags。AddMandatoryElementsOnly | DicomDataSetInitializeFlags.ExplicitVR);//在数据集中查找或插入(如果没有找到)一个元素,并设置元素的值ds.InsertElementAndSetValue (DicomTag。SOPInstanceUID uid);控制台。WriteLine ($"成功生成嵌入DICOM数据集的SOPInstanceUID ");}
按下运行项目F5,或选择调试->开始调试.
如果正确地执行了这些步骤,应用程序将运行并使用提供的参数生成UID< orgroot >日期和时间。然后将生成的UID插入到DICOM数据集中。
本教程展示了如何生成DICOM UID并将其插入到SOPInstanceUID标记用于DICOM数据集InsertElement ()方法。