ClearCanvas DICOM 开发系列 一

概述

C#开源的DICOM server.支持影像处理、影像归档、影像管理、影像传输和影像浏览功能。开源代码可学习地方很多。

 

官方网站:http://www.clearcanvas.ca

 

building ImageViewer 的代码,

1、打开ImageViewer.sln/Trunk/ImageViewer 用VS2008编译它.

2、运行ClearCanvas.Desktop.Executable Bin\debug 或Bin\Release下的项目.

 

 

  1. 编译通过ImageServer.sln/Trunk/ImageServer
  2. 修改 connectionStringsImageServer_Shreds_dist.config 的user 和 password 在你安装了ImageServer数据库后.
  3. 编辑/Trunk/ImageServer/Executable/Logging.config 的ConnectionString 的 user 和 password .
  4. 编译通过这个项目
  5. 开启 ClearCanvas.ImageServer.ShredHostService ,运行里面的wcf server,可以在Bin\Log 看到开启后的日志.

结果如下

ClearCanvas DICOM 开发系列 一_第1张图片

 

运行 ClearCanvas.Desktop.Executable 的结果如下

ClearCanvas DICOM 开发系列 一_第2张图片

 

 

测试往Server加入.dcm文件的代码如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
[TestFixture]
     public class ScuTests : AbstractTest
     {
         [TestFixtureSetUp]
         public void Init()
         {
             _serverType = TestTypes.Receive;
         }
 
         [TestFixtureTearDown]
         public void Cleanup()
         {
         }
 
         TestTypes _serverType;
 
         public IDicomServerHandler ServerHandlerCreator(DicomServer server, ServerAssociationParameters assoc)
         {
             return new ServerHandler( this , _serverType);
         }
 
         private StorageScu SetupScu()
         {
             StorageScu scu = new StorageScu( "TestAe" , "AssocTestServer" , "localhost" , 104);
 
             IList<DicomAttributeCollection> list = SetupMRSeries(4, 2, DicomUid.GenerateUid().UID);
 
             foreach (DicomAttributeCollection collection in list)
             {
                 DicomFile file = new DicomFile( "test" , new DicomAttributeCollection(), collection);
                 file.TransferSyntax = TransferSyntax.ExplicitVrLittleEndian;
                 file.MediaStorageSopClassUid = SopClass.MrImageStorage.Uid;
                 file.MediaStorageSopInstanceUid = collection[DicomTags.SopInstanceUid].ToString();
 
                 scu.AddStorageInstance( new StorageInstance(file));
             }
 
             return scu;
         }
 
         [Test]
         public void ScuAbortTest()
         {
             int port = 2112;
 
             /* Setup the Server */
             ServerAssociationParameters serverParameters = new ServerAssociationParameters( "AssocTestServer" , new IPEndPoint(IPAddress.Any, port));
             byte pcid = serverParameters.AddPresentationContext(SopClass.MrImageStorage);
             serverParameters.AddTransferSyntax(pcid, TransferSyntax.ExplicitVrLittleEndian);
             serverParameters.AddTransferSyntax(pcid, TransferSyntax.ExplicitVrBigEndian);
             serverParameters.AddTransferSyntax(pcid, TransferSyntax.ImplicitVrLittleEndian);
 
             _serverType = TestTypes.Receive;
             DicomServer.StartListening(serverParameters, ServerHandlerCreator);
 
             StorageScu scu = SetupScu();
 
             IList<DicomAttributeCollection> list = SetupMRSeries(4, 2, DicomUid.GenerateUid().UID);
 
             foreach (DicomAttributeCollection collection in list)
             {
                 DicomFile file = new DicomFile( "test" , new DicomAttributeCollection(),collection );
                 file.TransferSyntax = TransferSyntax.ExplicitVrLittleEndian;
                 file.MediaStorageSopClassUid = SopClass.MrImageStorage.Uid;
                 file.MediaStorageSopInstanceUid = collection[DicomTags.SopInstanceUid].ToString();
 
                 scu.AddStorageInstance( new StorageInstance(file));
             }
 
             scu.ImageStoreCompleted += delegate ( object o, StorageInstance instance)
                                         {
                                             // Test abort
                                             scu.Abort();
                                         };
 
             scu.Send();
             scu.Join();
 
             Assert.AreEqual(scu.Status, ScuOperationStatus.NetworkError);
 
             // StopListening
             DicomServer.StopListening(serverParameters);
         }
     }

 

 

 

如果直接是filePath的话也可以这样

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class ImageStoreDAL
{
     private ConnectModel _connectModel;
 
     public ImageStoreDAL(ConnectModel connectModel)
     {
         _connectModel = connectModel;
     }
 
     public ConnectModel ConnectModelInstance
     {
         get { return _connectModel; }
         set { _connectModel = value; }
     }
 
     private StorageScu SetupScu( string filePath)
     {
         StorageScu scu = new StorageScu(_connectModel.ClientAETitle, _connectModel.RemoteAE, _connectModel.RemoteHost, _connectModel.RemotePort);
         DicomFile file = new DicomFile(filePath);
         scu.AddStorageInstance( new StorageInstance(file));
         return scu;
     }
 
     public ScuOperationStatus ImageStoreByFilePath( string filePath)
     {
         StorageScu scu = SetupScu(filePath);
         scu.Send();
         return scu.Status;
     }
}

引用自 :http://www.cnblogs.com/springyangwc/archive/2012/02/28/2372105.html

你可能感兴趣的:(canvas)