本人第一次写博文,有点小紧张。。。但是本着帮助大家的心里,我还是鼓起勇气写了这边博文。首先说明一点就是我也是初学者,和zssure比起来真的是凤毛麟角。。大家有兴趣可以去他的博客专栏,很系统的描写dicom的具体实现,地址在这 http://blog.csdn.net/zssureqh/articlehttp://blog.csdn.net/zssureqh/article
好了废话不多说了,我就具体来说一下怎么来实现(添加)fo-dicom这个开源库呢?如果要了解具体思路的可以去看zssure 的博客哦(本人喜欢操作。。。。。)。一个方法是可以去这个网站下载https://github.com/rcd/fo-dicom
然后点击download下载,然后编译就可以了,里面有很多例子,具体使用他的时候你右键里面的Dicom工程,编译生成dll文件,到时候你自己要用的话直接添加就ok了。还有一种方法就是直接右键引用Manage Nuget packages(原谅我用英文,公司就用英文。。。)搜索输入fo-dicom
下载下来按照图片步骤操作就可以咯。
我们公司本来是自己写得获取RIS的代码,不过时常出现bug,效率很低,后来听说有fo-dicom这样一个专门为c#开发的开源库实在是很实用,所以就开始慢慢了解(不扯了。。。)万事开头难,你添加完fo-ficom的开源库,你会在想接下来该干什么呢。。别担心在你下载的(使用第一种方法的)网站,你一直往下拉会有代码示例的哦
var cfind = DicomCFindRequest.CreateStudyQuery(patientId: "12345");
cfind.OnResponseReceived = (DicomCFindRequest rq, DicomCFindResponse rp) => {
Console.WriteLine("Study UID: {0}", rp.Dataset.Get(DicomTag.StudyInstanceUID));
};
var client = new DicomClient();
client.AddRequest(cfind);
client.Send("127.0.0.1", 104, false, "SCU-AE", "SCP-AE");
不过这个不是查询worklist的,是用于c-find网络传输的(具体的实现在zssure那也有哦,有兴趣的可以去看下),我们对代码稍作修改
var cfind = DicomCFindRequest.CreateWorklistQuery(patientId: "12345");
cfind.OnResponseReceived = (DicomCFindRequest rq, DicomCFindResponse rp) => {
Console.WriteLine("PatientBirthDate: {0}", rp.Dataset.Get(DicomTag.PatientBirthDate));
};
var client = new DicomClient();
client.AddRequest(cfind);
client.Send("127.0.0.1", 104, false, "SCU-AE", "SCP-AE");
可是当我输入scheduledDateTime的参数时,你运行程序是,结果都是空的(),这是为什么呢?研究了半天是因为studytime的tag的原因,我们需要在连接客户端前添加这个tag,就像这样
var cfind = DicomCFindRequest.CreateWorklistQuery(patientId: "12345");
cfind.OnResponseReceived = (DicomCFindRequest rq, DicomCFindResponse rp) => {
Console.WriteLine("PatientBirthDate: {0}", rp.Dataset.Get(DicomTag.PatientBirthDate));
};
var client = new DicomClient();
cfind.Dataset.Add(DicomTag.ScheduledProcedureStepStartTime, "");
client.AddRequest(cfind);
client.Send("127.0.0.1", 104, false, "SCU-AE", "SCP-AE");
好的,对于fo-dicom查询worklist的具体操作步骤我大体就是给大家演示了以下希望可以对大家有所帮助!后续应该还会有更多的文章。