반응형

1. 파일 다운로드

  • DCMTK 3.6.6 Source Code
  • dcmtk-3.6.6-win64-support-MD-iconv-msvc-15.8
  • cmake-3.14.3-win64-x64.exe

2. CMake 진행

  • Source Code와 Build Binaries 경로 설정
  • Configure 클릭하여 컴파일러 버전(x64 / x86) 선택
  • MT 옵션들을 MD 옵션으로 수정 (MT -> MD , MTd -> MDd)
  • DCMTK_OVERWRITE_WIN32_COMPILER_FLAGS 체크해제
  • 출력 경로 지정
  • Support 라이브러리 경로 지정
  • DCMTK_ENABLE_STL_LIMITS 값 ON으로 설정
  • 기타옵션들 설정
  • Config 버튼 클릭후 경로 확인하여 지정되지 않은것은 수동으로 지정이 필요함
  • dcmtk.lib, dcmtk.dll 로 하나의 라이브러리 파일로 만들고 싶을때는 아래 옵션 체크
  • Open Project 클릭하여 VS 2019 실행

3. Visual Studio 2019에서 빌드

  • 메뉴 Build - Batch Build 후 All_BUILD 체크 후 Buildd 클릭하여 빌드 진행

 

  • 빌드 완료 후 INSTALL 프로젝트 선택하여 빌드

4. DCMTK 사용 예제

  • 프로젝트 설정에 Include Directory , Library Directory 추가
  • Include Directory : C:\Workspace\DCMTK\dcmtk-3.6.6-output\include
  • Library Directory : C:\Workspace\DCMTK\dcmtk-3.6.6-output\lib
  • Linker-Input-Additional Dependencies에 라이브러리 추가

  • dcmtk 사용 샘플 소스
#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 = "C:\\Workspace\\chestTest.dcm";

    ReadPatientName(dicomFileformat, dicomFile);

    SavePatientName(dicomFileformat, dicomFile, "John Snow");

    ReadPatientName(dicomFileformat, dicomFile);

    system("pause");

    return 0;
}

 

* 참고

  • cmake-GUI 가 실행되지 않거나 UI가 뜨지 않을경우 레지스트리 삭제
    • Computer\HKEY_CURRENT_USER\Software\Kitware\CMakeSetup
반응형

'[====== Development ======] > DICOM' 카테고리의 다른 글

[DCMTK] JPEG 압축  (0) 2022.06.10
DICOM DOSE SR 관련 자료  (0) 2021.09.24
DICOM UID 생성규칙  (0) 2021.08.18
[DCMTK] Send DICOM  (0) 2021.07.29
[DCMTK] Simple StoreSCP  (0) 2021.07.29

+ Recent posts