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下的项目.
- 编译通过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 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 开发系列 一相关推荐
- iOS开发系列--让你的应用“动”起来
概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画 ...
- iOS开发系列--通知与消息机制
http://www.cocoachina.com/ios/20150318/11364.html 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣 ...
- iOS开发系列--UITableView全面解析
iOS开发系列--UITableView全面解析 2014-08-23 23:20 by KenshinCui, 2202 阅读, 18 评论, 收藏, 编辑 --UIKit之UITableView ...
- java转安卓快吗_安卓Kotlin开发系列之Java快速转Kotlin
原标题:安卓Kotlin开发系列之Java快速转Kotlin 自从Kotlin被宣布为Android开发语言的官方支持后,如今可谓是火的一塌糊涂,作为一名Android程序员,如何快速爬坑?今天为大家 ...
- 【Windows10nbsp;IoT开发系列】“Hello,World!”指导
原文:[Windows10 IoT开发系列]"Hello,World!"指导 本文主要是介绍使用C#来开发一个可以运行在Raspberry Pi2上的一个基本项目. 1.在启动V ...
- BizTalk 开发系列(四十二) 为BizTalk应用程序打包不同的环境Binding
更多内容请查看:BizTalk动手实验系列目录 BizTalk 开发系列 我们在使用微软或者其他公司提供的BizTalk应用程序MSI包的时候经常会有一个目 ...
- Camera开发系列之六-使用mina框架实现视频推流
章节 Camera开发系列之一-显示摄像头实时画面 Camera开发系列之二-相机预览数据回调 Camera开发系列之三-相机数据硬编码为h264 Camera开发系列之四-使用MediaMuxer封 ...
- Cocos2dx游戏开发系列笔记6:怎样让《萝莉快跑》的例子运行在vs和手机上
2019独角兽企业重金招聘Python工程师标准>>> 感谢听D同学赞助的Demo. 那怎样让它运行在vs中呢: 1 使用cocos2d-x-2.2\tools\project-cr ...
- PHP扩展开发系列01 - 我要成为一名老司机
PHP扩展开发系列01 - 我要成为一名老司机 1. 关于扩展的教程貌似挺全了,为啥还写? 记录下我写扩展的历程 自认为会写的更容易理解 我的宗旨就是 "先用再识" 代码写着写着就 ...
最新文章
- 这是我读过写得最好的【秒杀系统架构】分析与实战!
- 用java建一个类_利用JAVA创建一个类。
- 破解石碑(区间动规)
- fork() || fork()和fork() fork()笔试题
- use resources at the campus if possible
- iOS之深入解析分类Category的底层原理
- md5加密+盐方式一
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- 虚拟机fedora共享_开源虚拟现实,用于电子测试的新电路板,Fedora 25,以及更多新闻
- BigInteger详解
- 设计模式的学习(9)外观模式
- MAC下 安装sqlmap教程
- 管家婆A8 TOP V9.5.1版本安装需知!
- 思科、华为路由器破解过程
- 机器人技术(7)AtdRobot六自由度机械臂控制教程
- 制作maven模板框架
- 地铁7号线路图_成都地铁7号线线路图_运营时间票价站点_查询下载
- js实现类似栈和队列的行为,以及push和unshift两个方法的性能测试
- APISpace 语音验证码API
- 健身机构如何入局知识付费?