DCMTK3.6.0 入门指南
By 郭俞伯
usher2007@foxmail.com
环境 WIN7 + VisualStudio2010 + dcmtk3.6.0 + Cmake2.8.6
准备工作:
从 dcmtk 官 方 网 站 下 载 源 代 码 及 支 持 库 文 件 。 分 别 名 为 :dcmtk-3.6.0
dcmtk-3.6.0-win32-i386-support_MT.(注意,要下载***support 的压缩文件,而不
要下载上面单独列出来的支持库)。将这些压缩文件解压缩到硬盘上一个单独的
文件夹里,我的解压缩目录是 D:\DCMTK\。
从 cmake 官方网站下载 cmake 的安装文件,我下载的是最新的 2.8.6 版。将其安
装到计算机任意目录下。
正文:
1. 将支持库中的相应 lib 文件,include 文件,bin 文件拷贝到 VS2010 安装目录
的相应文件夹下。
A. 在解压得到的支持库的文件夹下搜索_d.lib 文件(_d 代表 debug 版本),应
该会得到 7 个结果,将这些文件复制到一个单独的文件夹下,并把它们的
名字中的_d 去掉,例如将 zlib_d.lib 重命名为 zlib.lib。将重命名后的文件
拷贝至 VS2010 安装目录下的 lib 文件夹下,在我的电脑上是 D:\Program
Files\Microsoft Visual Studio 10.0\VC\lib\。
B. 在解压得到的支持库的文件夹下搜索 include,应该得到 5 个文件夹,将
这些文件夹复制到 D:\Program Files\Microsoft Visual Studio 10.0\VC\下,选
择合并文件夹(也就是将 include 文件夹下的内容全部复制到 D:\Program
Files\Microsoft Visual Studio 10.0\VC\include\目录下)
C. 将 D:\DCMTK\dcmtk-3.6.0-win32-i386-support_MT\openssl-1.0.0c\bin 下的
三个文件复制到 D:\Program Files\Microsoft Visual Studio 10.0\VC\bin\下。
2. CMAKE 编译
A. 打开安装好的 CMAKE。关闭所有跟 VS 有关的程序。在 where is the source
code 里 , 选 择 你 的 dcmtk 源 代 码 的 位 置 , 我 的 源 代 码 位 置 是
D:\DCMTK\dcmtk-3.6.0。在 where to build the binaries 下选择你想存放 build
结果的文件夹,我新建了一个 D:\DCMTK\dcmtk-bin 的文件夹。
B. 点击 Configure,选择编译环境。我的电脑上装的 VS2010,因此我选择的
Visual Studio2010。点击 finish。等待 configure 完成。这中间会出现***not
found 的信息,忽略它们。
C. 这时候 CMAKE 会列出所有的支持库的名字,勾选上 openssl,png,tiff,
xml 和 zlib,其他的保持默认。
D. 勾选上 Advanced 复选框,这是下面的内容变多了。将所有的/MD 改成
/MT,/MDd 改成/MTd。CMAKE_INSTALL_PREFIX 下会有安装路径,自选,不
要选择带有中文的目录。
E.再次点击 Configure。这回 Configure 很快,之后点击 Generate。
3. VS2010 编译
这时在 D:\DCMTK\dcmtk-bin 下会多出来很多文件夹和文件。用 VS2010 打开
其中的 sln 文件。在一个 solution 下会有很多个 project。
A. 点击 Build->Batch Build,选择 ALL_BUILD 的 debug 版,点击右边的 Build。
耐心等待。会有很多个 warning,应该是由字符编码不统一引起的。最后
会看到 78 个编译 成功,0 个失败。
B. 之后,再选择 Build->Batch Build,这次选择 INSTALL 的 debug 版本,点击
右边的 Build。最后会显示 3 个工程编译成功,这时在你选择的安装目录
下(默认是 C:\Program Files\DCMTK)就会有 lib,bin,include,etc,share 文件
夹,里面就是之后写程序做医学图像处理所需要的库文件了!
4. 一个小例程,进行简单的测试
源代码:
#include
#include
int main(void)
{
DcmFileFormat fileformat;
OFCondition oc = fileformat.loadFile("D:\\021A3C1C.dcm");
if(oc.good()){
OFString patientName;
if(fileformat.getDataset()->findAndGetOFString(DCM_PatientName,
patientName).good())
{
}
std::cout<<"Patient Name:"<C/C++->General下,Additional Include Directories里加入
上 一 步 编 译 出 来 的 include 文 件 夹 , 我 的 电 脑 上 是 D:\Program
Files\DCMTK\include,这一步是为了让程序能够找到头文件。
D.C/C++->code generation里,Runtime Library 选择/MTd,这一步是要和之
前CMAKE的编译选项一致。
E.Linker->General里,Additional Library Directories里填写上一步编译出
来的lib文件夹,我的电脑上是D:\Program Files\DCMTK\lib,这一步是为了
让程序能够找到之前编译好的lib文件。
F.Linker->Input 里 , 在 Additional
Dependencies 里 依 次 加 上
wsock32.lib;netapi32.lib;ofstd.lib;oflog.lib;dcmdata.lib;zlib.lib;
这一步是加入具体我们程序需要的lib文件。网上很多的帖子中,都没有提到
oflog.lib这个文件,可能是由于旧的版本中并没有使用到这个文件。但是对
于3.6.0版,这个lib文件是必需的。
G.Apply ,ok,编译工程,运行,命令行应该输出Patient Name:CHAI YI DONG。
Happy dcmtking!