본문 바로가기

내가 작업한 것들/소프트웨어

Tiny DICOM 라이브러리 소개



 지금 소개 하는 이 라이브러리는 제 gitHub 에 공개된 저장소의 소스코드 입니다. 의료용 으로 사용중인 DICOM tag 를 읽고 쓸 수 있도록 만든 작고 가벼운 라이브러리로서 저장소 복제를 통해 새로운 버젼을 만들어 개선을 하거나 용도에 맞게 변경이 가능합니다.

 소스코드는 현재 Windows용 gcc 인 MinGW 와 Code::Blocks 에 맞춰져 있는 상태 입니다만 Linux (Embedded 포함) 이나 다른 platfrom 에 사용이 가능합니다. gitHub 는 버젼관리 도구로서 HG 를 사용 하고 있으나, 그냥 소스코드를 받기 위해서 ZIP 으로 압축 후 받을 수 있는 기능을 기본으로 지원 해 주고 있으므로 간단한 소개로 ZIP 다운로드를 통한 빌드를 소개 하고자 합니다.


소스 다운로드

 먼저 주소 https://github.com/rageworx/libtinydicom 로 이동 한 다음 페이지 오른쪽 메뉴 부분 중 Download ZIP 을 선택 하도록 합니다. 파일 이름은 기본으로 libtinydicom-master.zip 이 됩니다.

 다운로드가 완료 되면 압축 된 파일을 소스를 빌드 할 수 있는 위치에 풀도록 합니다.


소스 빌드

 압축을 푼 위치를 확인 하시면 다음과 같은 파일이 보이며, Code::Blocks (이하 CB라 표시) 를 설치 한 상태라면 3개의 Project 파일을 용도에 따라서 열 수 있습니다.



 각기 3개의 cbp (Code::Blocks project) 파일은 다음과 같이 사용될수 있도록 만들어 졌습니다.

  • dicomtest.cbp : 라이브러리 테스트용 프로젝트
  • dlltinydicom.cbp : DLL 라이브러리 빌드용 프로젝트
  • libtinydicom.cbp : A(lib) 라이브러리 빌드용 프로젝트

 위 파일들 중 기본 기능을 사용하기 위해 static library 를 담당 하는 프로젝트는 libtinydicom.cbp 이며, 이를 사용하기 편하도록 wrapping 한 것으로는 dlltinydicom.cbp 가 있습니다, 이는 Windows 환경에서 DLL 로 만들어진 라이브러리를 쓸 수 있도록 한 것이며, 이와 함께 dicomtest.cbp 를 사용할 수 있습니다.


 먼저 프로젝트를 빌드 하는 예를 위해서는 lib 으로 시작하는 프로젝트 파일을 먼저 열어 빌드 하도록 하겠습니다.



 라이브러리 빌드 타겟은 2가지로, 각각 DEBUG 와 RELEASE 를 지원 하고 있으며 단순히 디버깅 정보를 포함 하는가와 아닌가의 차이라고 하겠습니다. 여기서는 일단 DEBUG (기본) 으로 빌드 하도록 하겠습니다.

 CB에서 빌드는 Ctrl+F9 를 눌러서 진행 할 수도 잇지만 메뉴의 Debug>Build 를 선택해서 진행 할 수도 있습니다.



 빌드가 정상으로 진행 된다면 아래처럼 에러의 수가 0 으로 표시 됩니다. MinGW(gcc) 3.x 부터 4.x 까지 (32bit, 64bit 함께 정상 지원) 모두 빌드가 정상으로 진행 됩니다만, 다른 컴파일러에 대해서는 빌드를 테스트 해 보지 않았으므로 오류가 있을 수 있습니다. (아래는 MinGW 4.4.5 64bit)



빌드가 정상으로 진행 되면 MinGW 기준으로 libtinydicom.a 파일이 lib 이란 폴더 안에 만들어 지게 됩니다.


라이브러리 테스트

 테스트 코드는 lib 이 아닌 dll 을 사용해서 동작 하도록 만들어 졌습니다. 위의 라이브러리 빌드 와 동일하게 dll 로 시작하는 프로젝트를 열고 빌드 후 test 용 프로젝트를 열어서 빌드후 진행 합니다.

 dicomtest.cbp 를 먼저 dlltinydicom.cbp 를 통해 DEBUG 옵션으로 빌드 후, 열어 준 다음 바로 실행 하면 아래와 같이 표시 되는 것을 확인 할 수 있습니다.



 test 에서는 dcm 폴더 안의 TEST.DCM 에서 몇개의 tag 정보를 알아 온 다음 이를 통해서 새로운 NEW.DCM 을 만들어 내는 과정을 수행 하고 있습니다. 별도의 가짜 이미지 (500x500) 를 저장하도록 하고 있으나 몇가지 중요 tag 를 쓰지 않았으므로 실제 DCM 을 읽어 보여 주는 뷰어에서는 제대로 보이지 않을 수 있습니다.


이어서 짬나는 대로 다른 프로젝트를 통해 DCM 의 활용을 보여 드리도록 하겠습니다.