概述
C#开源的DICOM server.支持影像处理、影像归档、影像管理、影像传输和影像浏览功能。开源代码可学习地方很多。
官方网站:http://www.clearcanvas.ca
building ImageViewer 的代码,
1、打开ImageViewer.sln 在 /Trunk/ImageViewer 用VS2008编译它.
2、运行ClearCanvas.Desktop.Executable Bin\debug 或Bin\Release下的项目.
结果如下
运行 ClearCanvas.Desktop.Executable 的结果如下
测试往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