DICOM的C++支持库-DCMTK的编译和配置

2019-05-20  本文已影响0人  JasonLiThirty

视频教程:https://www.bilibili.com/video/av55027364

1.下载源文件和支持库


下载DCMTK源文件包并解压

下载支持库包并解压


2.构建和编译DCMTK工程(CMake+VS2015)


- 下载CMake并安装

- 使用CMake构建工程

BUILD组设置如图

DCMTK组和WITH组设置如图

CMAKE组,保持默认即可,如果C盘只有管理员权限,则可以将CMAKE_INSTALL_PREFIX设置为其他路径(后续修改工程的CMake文件也可以),这个设置就是下一步DCMTK工程编译出来的一系列文件的存放路径

DOXYGEN组,ICU组下默认设置

- 检查工程属性

- 编译DCMTK工程



3. 编码验证DCMTK库


- 建立Windows控制台工程并配置

image34.png

- 编写测试代码

// 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库

上一篇 下一篇

猜你喜欢

热点阅读