概述

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.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 abortscu.Abort();};scu.Send();scu.Join();Assert.AreEqual(scu.Status, ScuOperationStatus.NetworkError);// StopListeningDicomServer.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/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/springyangwc/archive/2012/02/28/2372105.html

ClearCanvas DICOM 开发系列 一相关推荐

  1. iOS开发系列--让你的应用“动”起来

    概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画 ...

  2. iOS开发系列--通知与消息机制

    http://www.cocoachina.com/ios/20150318/11364.html 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣 ...

  3. iOS开发系列--UITableView全面解析

    iOS开发系列--UITableView全面解析 2014-08-23 23:20 by KenshinCui, 2202 阅读, 18 评论, 收藏,  编辑 --UIKit之UITableView ...

  4. java转安卓快吗_安卓Kotlin开发系列之Java快速转Kotlin

    原标题:安卓Kotlin开发系列之Java快速转Kotlin 自从Kotlin被宣布为Android开发语言的官方支持后,如今可谓是火的一塌糊涂,作为一名Android程序员,如何快速爬坑?今天为大家 ...

  5. 【Windows10nbsp;IoT开发系列】“Hello,World!”指导

    原文:[Windows10 IoT开发系列]"Hello,World!"指导 本文主要是介绍使用C#来开发一个可以运行在Raspberry Pi2上的一个基本项目. ​1.在启动V ...

  6. BizTalk 开发系列(四十二) 为BizTalk应用程序打包不同的环境Binding

    更多内容请查看:BizTalk动手实验系列目录                       BizTalk 开发系列 我们在使用微软或者其他公司提供的BizTalk应用程序MSI包的时候经常会有一个目 ...

  7. Camera开发系列之六-使用mina框架实现视频推流

    章节 Camera开发系列之一-显示摄像头实时画面 Camera开发系列之二-相机预览数据回调 Camera开发系列之三-相机数据硬编码为h264 Camera开发系列之四-使用MediaMuxer封 ...

  8. Cocos2dx游戏开发系列笔记6:怎样让《萝莉快跑》的例子运行在vs和手机上

    2019独角兽企业重金招聘Python工程师标准>>> 感谢听D同学赞助的Demo. 那怎样让它运行在vs中呢: 1 使用cocos2d-x-2.2\tools\project-cr ...

  9. PHP扩展开发系列01 - 我要成为一名老司机

    PHP扩展开发系列01 - 我要成为一名老司机 1. 关于扩展的教程貌似挺全了,为啥还写? 记录下我写扩展的历程 自认为会写的更容易理解 我的宗旨就是 "先用再识" 代码写着写着就 ...

最新文章

  1. 这是我读过写得最好的【秒杀系统架构】分析与实战!
  2. 用java建一个类_利用JAVA创建一个类。
  3. 破解石碑(区间动规)
  4. fork() || fork()和fork() fork()笔试题
  5. use resources at the campus if possible
  6. iOS之深入解析分类Category的底层原理
  7. md5加密+盐方式一
  8. IOS中NSUserDefaults的用法(轻量级本地数据存储)
  9. 虚拟机fedora共享_开源虚拟现实,用于电子测试的新电路板,Fedora 25,以及更多新闻
  10. BigInteger详解
  11. 设计模式的学习(9)外观模式
  12. MAC下 安装sqlmap教程
  13. 管家婆A8 TOP V9.5.1版本安装需知!
  14. 思科、华为路由器破解过程
  15. 机器人技术(7)AtdRobot六自由度机械臂控制教程
  16. 制作maven模板框架
  17. 地铁7号线路图_成都地铁7号线线路图_运营时间票价站点_查询下载
  18. js实现类似栈和队列的行为,以及push和unshift两个方法的性能测试
  19. APISpace 语音验证码API
  20. 健身机构如何入局知识付费?

热门文章

  1. 12种Dropout方法:应用于DNNs,CNNs,RNNs中的数学和可视化解释
  2. CVPR2020夜间行人检测挑战赛两冠一亚:DeepBlueAI获胜方案解读
  3. 「机器学习速成」过拟合的风险和泛化
  4. 为什么说GAN很快就要替代现有摄影技术了?
  5. AI时代我们最好做某领域的专家或高手
  6. OpenAI联合创始人:AI的极限?我真的不知道!
  7. SAP PP 启用了MRP Area之后MMBE有什么变化?
  8. 干货丨贝叶斯机器学习前沿进展
  9. 小白如何在Windows如何安装双系统Centos7
  10. latex中的各种文件