Configurar DCMTK con CMake, para el desarrollo en C++ y Visual Studio 2019

Brandon Lara
6 min readJul 13, 2021

--

DCMTK Consiste en un conjunto de librerías y aplicaciones que implementan una gran parte del estándar DICOM, que contiene funcionalidad para examinar, construir y modificar imágenes DICOM, además de enviar y recibir imágenes a través de una conexión red.

Al utilizar C++ lo ideal es desarrollar con Visual Studio, pero para poder generar los archivos con las librerías y el proyecto que utilizaría DCMTK se ha utilizado el programa CMake.

En primer lugar tenemos que descargar el código fuente y la documentación de la librería que nos proporciona la página web https://dicom.offis.de/dcmtk.php.en en la sección DCMTK 3.6.6 — source code and documentation (2021–01–22)

Para las utilizar las funcionalidades de DCMTK se necesitan las librerías externas ICONV, que podemos que descargar desde la misma página web https://dicom.offis.de/dcmtk.php.enen la sección DCMTK 3.6.6 — support libraries for Windows que se encuentra un poco mas abajo.

Como se puede ver hay diferentes opciones dependiendo de lo que necesitemos, en este caso voy a utilizar las librerías externas iconv de 64bit con la opción MD (dcmtk-3.6.6-win64-support-MD-iconv-msvc-15.8.zip) Esto quiere decir que el resto de la guía se realizara para esta opción.

Por último necesitaremos el programa CMake https://cmake.org/download/ para poder generar e instalar la librería, y la última versión de Visual Studio Community https://visualstudio.microsoft.com/es/ para poder desarrollar la aplicación.

Con todo esto ya tendríamos todo lo necesario para empezar con la instalación y configuración de la librería, para ello lo primero que tenemos que hacer es extraer el zip del código fuente y el de las librerías externas en un sitio que podamos localizar, y a continuación ejecutar CMake, en este programa deberíamos establecer la ruta del código fuente y la de la carpeta en la que se va a generar el proyecto que utilizaremos para instalar DCMTK, esta puede ser inventada ya que en caso de no existir el propio programa nos la genera, por lo tanto debería quedar algo como esto:

Seguidamente hay que pulsar en el botón “Configure” que nos pedirá la versión de Visual Studio para la que se va a generar el proyecto, en mi caso seleccionare “Visual Studio 16 2019” ya que es la versión que tengo instalada en el ordenador. Es importante establecer explícitamente el campo Optional platform for generator a x64, no hay que dejarlo vacío.

El resto de opciones no hay que cambiarlas, por lo tanto, una vez seleccionada la versión de VS pulsamos en “Finish”, lo que hará que se nos llene la pantalla de CMake con diferentes parámetros de configuración.

Para poder ver todos los parámetros que se van a modificar hay que marcar la casilla “Advanced” y para poder visualizarlos mas claramente se puede marcar la casilla “Grouped”

La mayoría de los parámetros los podemos dejar como están, sin embargo, hay algunos que debemos cambiar para que se genere el proyecto correctamente:

  • En primer lugar, del grupo CMAKE hay que cambiar los parámetros que indican flags /MT o MTd por /MD y /MDd tal y cómo se ve en la siguiente captura:
  • En el grupo DCMTK es importante desmarcar la casilla DCMTK_OVERWRITE_WIN32_COMPILER_FLAGS
  • Las funcionalidades de DCMTK dependen de las librerías de soporte que hemos descargado previamente, pero las cuales se tienen que activar marcando las casillas de los parámetros DCMTK_WITH_INCONV, DCMTK_WITH_OPENSSL, DCMTK_WITH_PNG, DCMTK_WITH_TIFF, DCMTK_WITH_XML y DCMTK_WITH_ZLIB ubicados en el grupo DCMTK
  • En el grupo WITH, hay que modificar parámetros WITH_INCONV, WITH_OPENSSL, WITH_PNG, WITH_TIFF, WITH_XML y WITH_ZLIB estableciendo las rutas en las que se encuentran cada una de las librerías externas iconv. Estas librerías las hemos extraído antes de “dcmtk-3.6.6-win64-support-MD-iconv-msvc-15.8.zip”, y están organizadas en carpetas que identifican su nombre. De este modo, los parámetros quedarían configurados de la siguiente manera:

Luego hay que volver a pulsar en “Configure”, y una vez termine este proceso hay que pulsar el botón “Generate”. Después de todo se nos genera una carpeta “build” con el proyecto de Visual Studio que utilizaremos para instalar la librería. Es muy importante ejecutar Visual Studio como administrador para abrir este proyecto, ya que va a realizar la instalación en carpetas que requieren permiso de administrador para escribir archivos.

Una vez abierto el proyecto, lo primero que hay que hacer es compilar la solución en Visual Studio, este proceso suele tardar varios minutos.

Después de la compilación de la solución, el siguiente paso es compilar solamente el proyecto INSTALL esto lo que hace instalar todos los archivos de la librería en la ruta especificada anteriormente en CMake en el parámetro CMAKE_INSTALL_PREFIX.

A continuación, se tiene que crear el proyecto donde se va a desarrollar la aplicación utilizando las librerías DCMTK. Para poder llevar a cabo este proceso hay que crear un proyecto C++ con Visual Studio, el cual puede ser de cualquier tipo. Sin embargo, en mi caso, como ejemplo para esta guía creare una aplicación de consola C++ llamada TestDCMTK

Ahora solamente faltaría por configurar el proyecto para poder utilizar DCMTK, para ello hay que acceder a las propiedades del proyecto, y en el apartado VC++ Directories hay que añadir la ruta de la carpeta include de DCMTK en Include Directories. Mientras que en Library Directories hay que añadir la ruta de la carpeta lib de DCMTK y la ruta de la carpeta lib de zlib. En mi caso de prueba, el resultado de esta configuración seria el siguiente:

zlib es una de las librerías de soporte que se han descomprimido previamente de dcmtk-3.6.6-win64-support-MD-iconv-msvc-15.8

Por ultimo, hay que ir a la sección Linker -> Input y en Additional Dependencies hay que añadir las dependencias de DCMTK que se especifican a continuación :

Iphlpapi.lib
ws2_32.lib
wsock32.lib
netapi32.lib
ofstd.lib
oflog.lib
dcmdata.lib
dcmdsig.lib
dcmnet.lib
dcmsr.lib
dcmimgle.lib
dcmqrdb.lib
dcmtls.lib
dcmwlm.lib
dcmpstat.lib
dcmjpls.lib
dcmjpeg.lib
dcmimage.lib
ijg8.lib
ijg12.lib
ijg16.lib
i2d.lib
zlib_d.lib

Simplemente hay que copiar y pegar, y el resultado seria el siguiente:

Solo faltaría compilar la solución entera, y ya se podría empezar a probar y programar la aplicación, tal y como explico en la guía Construyendo una simple aplicación DICOM con C++ y DCMTK, en Visual Studio 2019

Photo by Danielle MacInnes on Unsplash

--

--