视频教程:https://www.bilibili.com/video/av55027364
1.下载源文件和支持库
下载DCMTK源文件包并解压
下载支持库包并解压
2.构建和编译DCMTK工程(CMake+VS2015)
- 下载CMake并安装
- 使用CMake构建工程
- 关闭所有和VS有关的程序,然后打开CMake-gui
- 设置sourcode路径,就是DCMTK包解压后的路径
- 设置构建出来的DCMTK工程的存放路径
- 勾选Grouped和Advanced
- 点击Conifigue,在打开的窗口里选择相应的VS版本(这里为Visual Studio 14 2015 Win64),点击Finish
- 等待设置完成后,界面出现设置选项,进行设置
BUILD组设置如图
DCMTK组和WITH组设置如图
CMAKE组,保持默认即可,如果C盘只有管理员权限,则可以将CMAKE_INSTALL_PREFIX设置为其他路径(后续修改工程的CMake文件也可以),这个设置就是下一步DCMTK工程编译出来的一系列文件的存放路径
DOXYGEN组,ICU组下默认设置
- 再次点击Configure,等待进一步设置完成,再点击Generate,生成工程后就可以点击Open Project打开工程了
- 检查工程属性
- 打开VS2015的Solution Explorer,查看任一工程的属性,查看以下工程选项(如何都满足,表示DCMTK工程构建成功)
- 字符集是否设置为多字节字符集
- 运行库是否为MDd和MD
- 编译DCMTK工程
- 打开VS2015的batch build对话框,在ALL_BUILD里勾选Debug和Release,点击Build,编译完成后会在工程bin目录下生成exe和dll,lib目录下生成lib
- 打开batch build对话框,在INSTALL里勾选你想配置的install版本(Debug或Release)
- 点击Build,会将相应的文件拷贝到最初在CMake里设置的CMAKE_INSTALL_PREFIX的路径下
- bin目录里为exe和dll
- include目录为头文件
- lib目录下生成lib
- 重要:将支持库包里的zlib_d.lib拷贝到生成的lib目录下(如果是区别Debug库和Release库,则应该拷贝这两个不同的文件,都改名为zlib.lib,然后在附加库配置上填写zlib.lib)
3. 编码验证DCMTK库
- 建立Windows控制台工程并配置
- 配置include目录和lib目录
- 配置依赖库
- 将DCMTK的bin目录下的ofstd.dll,oflog.dll,dcmdata.dll拷贝到工程的exe程序同目录下
- 编写测试代码
// C++_Dicom_Sample.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmdata/dctk.h"
#include <iostream>
bool ReadPatientName(DcmFileFormat &fileformat, std::string &filePath)
{
OFCondition status = fileformat.loadFile(filePath.c_str());
if (!status.good())
{
std::cout << "Load Dimcom File Error: " << status.text() << std::endl;
return false;
}
OFString PatientName;
status = fileformat.getDataset()->findAndGetOFString(DCM_PatientName, PatientName);
if (status.good())
{
std::cout << "Get PatientName:" << PatientName << std::endl;
}
else
{
std::cout << "Get PatientName Error:" << status.text() << std::endl;
return false;
}
return true;
}
bool SavePatientName(DcmFileFormat &fileformat, std::string &filePath, const std::string &info)
{
OFCondition status = fileformat.getDataset()->putAndInsertString(DCM_PatientName, info.c_str());
if (status.good())
{
std::cout << "Save PatientName:" << info.c_str() << std::endl;
}
else
{
std::cout << "Save PatientName Error: " << status.text() << std::endl;
return false;
}
status = fileformat.saveFile(filePath.c_str());
if (!status.good())
{
std::cout << "Save Dimcom File Error: " << status.text() << std::endl;
return false;
}
return true;
}
int main()
{
DcmFileFormat dicomFileformat;
std::string dicomFile = "E:\\Learning\\C++\\Sample\\C++_Dicom_Sample\\x64\\Debug\\CT-MONO2-16-chest.dcm";
ReadPatientName(dicomFileformat, dicomFile);
SavePatientName(dicomFileformat, dicomFile, "John Snow");
ReadPatientName(dicomFileformat, dicomFile);
system("pause");
return 0;
}
- 下载可供使用的Dicom文件
http://www.barre.nom.fr/medical/samples/
下载所需要的Dicom文件,并把文件路径修改在代码中
- 运行并查看输出
正确输出病人姓名,至此已成功编译DCMTK库
网友评论