概述
C#開源的DICOM server.支持影像處理、影像歸檔、影像管理、影像傳輸和影像瀏覽功能。開源代碼可學習地方很多。
官方網站:http://www.clearcanvas.ca
building ImageViewer 的代碼,
1、打開ImageViewer.sln 在 /Trunk/ImageViewer 用VS2008編譯它.
2、運行ClearCanvas.Desktop.Executable Bin\debug 或Bin\Release下的項目.
- 編譯通過ImageServer.sln 在 /Trunk/ImageServer
- 修改 connectionStrings在ImageServer_Shreds_dist.config 的user 和 password 在你安裝了ImageServer數據庫后.
- 編輯/Trunk/ImageServer/Executable/Logging.config 的ConnectionString 的 user 和 password .
- 編譯通過這個項目
- 開啟 ClearCanvas.ImageServer.ShredHostService ,運行里面的wcf server,可以在Bin\Log 看到開啟后的日志.
結果如下
運行 ClearCanvas.Desktop.Executable 的結果如下
測試往Server加入.dcm文件的代碼如下
[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的話也可以這樣
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;
}
}
歡迎各位參與討論,如果覺得對你有幫助,請點擊
推薦下,萬分謝謝.
作者:spring yang
出處:http://www.cnblogs.com/springyangwc/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


