使用LEADTOOLS框架编码实现一个 C STORE 加载项

发布时间:2017/03/28 00:03 发布者:Richard.Ma

返回博客中心

 

  1. 选择 文件->新建->项目.
  2. 新建项目 对话框中, 在项目类型列表中选择 Visual C#VB , 并在模板列表中选择 类库.
  3. 在项目名称字段中键入项目名称为SampleOptions,然后单击 确定。 如果需要,键入项目的新位置或使用浏览按钮选择目录,然后单击确定
  4. 在“解决方案资源管理器”窗口中,右键单击“引用”,然后从菜单中选择“添加引用”。 在“添加引用”对话框中,选择“浏览”选项卡,然后转至 LEADTOOLS 19 \ Bin \ DotNet \ Win32文件夹,选择以下DLLS:

    • Leadtools.dll
    • Leadtools.Dicom.dll
    • Leadtools.Dicom.AddIn.dll
    • Microsoft.Practices.Unity
  5. 单击确定按钮将上述DLL添加到应用程序。

  6. "解决方案管理器" 窗口右击 "SampleAddIn" 选择 添加->类 . 在"新建项" 对话框中, 在"名称" 字段中键入 Module.cs . 点击 "添加" 按钮.
  7. 打开 Module.cs文件添加以下使用语句:

    C#

    using Leadtools.Dicom.AddIn; 
    using Leadtools.Dicom.AddIn.Attributes; 
    using System.IO; 
  8. 定义 module 类如下所列:

    C#

    public class Module : ModuleInit 
    { 
       private static string _ImageDirectory = string.Empty; 
       public static string ImageDirectory 
       { 
          get 
          { 
             return _ImageDirectory; 
          } 
       } 
                        
       public override void Load(string ServiceDirectory, string DisplayName) 
       { 
          string dir = ServiceDirectory + @"\Images\"; 
          if(!Directory.Exists(dir)) 
             Directory.CreateDirectory(dir); 
                           
          _ImageDirectory = dir; 
       } 
    } 

    当此加载项加载时,Load功能由LEADTOOLS PACS Framework调用。 此类检查Images目录。 如果该目录不存在,它将由该插件创建。

  9. In the "Solution Explorer" window right-click Class1.cs and select Rename from the context menu. Type CStoreAddIn.cs and press Enter.在“解决方案资源管理器”窗口中,右键单击Class1.cs,然后从上下文菜单中选择“重命名”。 键入CStoreAddIn.cs,然后确定。

  10. 打开 CStoreAddIn.cs 文件添加以下使用语句:

    C#

    using Leadtools.Dicom; 
    using Leadtools.Dicom.AddIn; 
    using Leadtools.Dicom.AddIn.Interfaces; 
    using Microsoft.Practices.Unity; 
  11. IProcessCStore添加到CStoreAddIn类派生列表中。 你的类应该如下所示:

    C#

    public class CStoreAddIn : IProcessCStore 
    { 
    } 
  12. 右击IProcessCStore 然后选择"实现接口-> 实现接口" 你的类应该如下所示:

    C#

    [DicomAddInAttribute("CStore","1.0.0.0",Description="DICOM Storage",Author="")] 
    public class CStoreAddIn : IProcessCStore 
    { 
       #region IProcessCStore Members 
       public DicomCommandStatusType OnStore(DicomClient Client, byte PresentationId, int MessageId, string AffectedClass, string Instance, DicomCommandPriorityType Priority, string MoveAE, int MoveMessageId, DicomDataSet Request) 
       { 
          throw new NotImplementedException(); 
       } 
                        
       #endregion 
       #region IProcessBreak Members 
       public void Break(BreakType type) 
       { 
          throw new NotImplementedException(); 
       } 
       #endregion 
    } 
  13. 要告诉服务器我们感兴趣的,我们需要为OnStore方法指定PresentationContextAttributes。 这会允许服务器建立一个association,以便在客户端连接时使用。 在这个例子中,我们将只存储CT图像。 因此,我们需要为OnStore方法输入以下属性:

    C#

    [PresentationContext(DicomUidType.CTImageStorage,  
    DicomUidType.ImplicitVRLittleEndian, 
    DicomUidType.JPEG2000, 
    DicomUidType.JPEG2000LosslessOnly, 
    DicomUidType.JPEGBaseline1, 
    DicomUidType.JPEGExtended2_4, 
    DicomUidType.ExplicitVRBigEndian, 
    DicomUidType.ExplicitVRLittleEndian, 
    DicomUidType.JPEGLosslessNonhier14,                                                  
    DicomUidType.JPEGLosslessNonhier14B)] 
    public DicomCommandStatusType OnStore(DicomClient Client, byte PresentationId, int MessageId, string AffectedClass, string Instance, DicomCommandPriorityType Priority, string MoveAE, int MoveMessageId, DicomDataSet Request) 

    这样可以存储具有上述传输语法的CT图像。

  14. 添加可以将映像保存到磁盘的代码段。 您的OnStore方法应如下所示:

    C#

    public DicomCommandStatusType OnStore(DicomClient Client, byte PresentationId, int MessageId, string AffectedClass, string Instance, DicomCommandPriorityType Priority, string MoveAE, int MoveMessageId, DicomDataSet Request) 
    { 
       DicomCommandStatusType status = DicomCommandStatusType.Success; 
       try 
       { 
          if(Request!=null) 
          { 
             string sop = Request.GetValue(DicomTag.SOPInstanceUID, string.Empty); 
             if(string.IsNullOrEmpty(sop)) 
                status = DicomCommandStatusType.ProcessingFailure; 
             else 
             { 
                string file = string.Format("{0}{1}.dic", Module.ImageDirectory,sop); 
                Request.Save(file, DicomDataSetSaveFlags.None); 
             } 
          } 
       } 
       catch(Exception e) 
       { 
          status = DicomCommandStatusType.ProcessingFailure; 
       } 
       return status; 
    } 
  15. 构建类库并获取输出,然后将其放在先前创建的服务器的AddIn目录中。

  16. 如果服务器正在运行,停止。然后重新启动服务器。
  17. 连接并存储CT图像。

关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网