项目需要使用Dicom,目前主流开源代码主要是DCMTK和mDcm。
1. DCMTK:
详细介绍参见官网:http://www.dcmtk.org/
优点:
1) 跨平台。
提供源码和封装的MT、MD库,可使用CMAKE等工具获取对应平台的工程。
2)使用用户多,使用时间长,不断有维护升级。其出现bug概率较小,重要问题也可指望会在后续得以解决。
3)使用资料较多。网络上资料较多,如 http://bbs.hc3i.cn/tag.php?name=dcmtk
4)源码注释较合理,代码编写质量较好,项目划分较为详细合理。
缺点:
1)使用VS等,需要使用CMAKE进行转化。
不过有具体的参考操作,只要配置正确应无问题。参见:http://bbs.hc3i.cn/thread-26234-1-1.html
2)不能直接供C#调用,需要封装成DLL。
封装方法:
A. 建立DLL项目,把所有文件重新包含后生成DLL;
B. 直接使用转化好的Lib和.h,建立DLL项目,根据需要把对应的方法包含进去,生成DLL。 这样做中间代码会多些,但可保护源代码和源工程,如果需要进一步升级,直接更换对应的lib和.h,涉及应用则只需要维护封装的DLL代码即可。(这也是我准备使用的方案)
3)需要同时熟悉C#和C++,后续维护需要有具备这方便技能的人员。
2. mDCM
详细见:https://github.com/ignacioinnovo/mdcm
优点:
1) 主要代码为C#编写,方便使用C#的工程使用。
2) 部分C++代码也已经封装成DLL,省去部分工作。
缺点:
1) 使用用户较少,潜在的bug风险较大。
2) C#部分代码注释量太少。
3) 针对大数据(如影像数组)操作,没有使用指针,性能上会差些。如果对读写速度有要求,则需要对此进行优化。
整体比较,决定使用DCMTK作为本项目的Dicom开源代码库。(另外还有程序员的私心:希望加强下C++相关知识)
最后向DCMTK和mDcm等开源项目的开发和维护人员们致敬!