DICOMHERO C++ DICOM library: works on Linux, Windows, macOS, iOS and Android.
Written in C++. Wrappers for Java, Objective-C, Swift.


Build with confidence

  • Full source code (c++ and Objective-C included, Java auto-generated by SWIG, Swift auto-generated by XCode bridge headers)
  • Extensive documentation
  • One year of support & upgrades
  • SDK requirements and risk analysis
  • Standard Operating Procedures used for the development of the SDK
  • Test units with test coverage report
  • Binary compatibility between minor releases

Send and receive DICOM messages

Communicate via DICOM messages (DIMSE) over network associations (ACSE).

DICOMHERO SDK can act as SCU, SCP or both and recognizes all the composite and normalized DIMSE commands.

AssociationSCU scu("SCU", scpName, 1, 1, presentationContexts, readSCU, writeSCU, 0);

DimseService dimse(scu);

CEchoCommand echoCommand(
    "1.2.840.10008.1.1",
    dimse.getNextCommandID(),
    dimseCommandPriority_t::medium,
    "1.1.1.1.1");

dimse.sendCommandOrResponse(echoCommand);

CEchoResponse response =
    dimse.getCEchoResponse(echoCommand);

DICOM & DICOMDIR files

Read and write DICOM and Jpeg files and have both high-level and raw access to the data.

Lazy loading allows the processing of large DICOM files.

DicomDir newDicomDir;

DicomDirEntry rootRecord = 
    newDicomDir.getNewEntry("PATIENT");

DataSet dataSet(rootRecord.getEntryDataSet());
    dataSet.setUnicodeString(TagId(tagId_t::PatientName_0010_0010), L"Surname");
newDicomDir.setFirstRootEntry(rootRecord);

Supports compressed (lossy/lossless) and raw images

Decompress the embedded images or convert them to other color formats or bit depth. Supports raw, rle, jpeg baseline and jpeg lossless.

Transform transformToYBR = 
    colorTransformsFactory::getTransform(
      "RGB", 
      "YBR_FULL");
Image ybrImage = 
    transformToYBR.allocateOutputImage(
      baselineImage, 
      width, 
      height);
transformToYBR.runTransform(
    baselineImage, 
    0, 0, 
    width, height, 
    ybrImage, 
    0, 0);

Unicode support

DICOMHERO translates Unicode strings to/from multiple DICOM charsets.

structuredReport.addPatientModule()
    .setPatientNameUnicodeValue(
      UnicodePatientName(
        L"Test^Patient", 
        L"", 
        L""))
    .setPatientBirthDateValue(
      Date(
        2020, 1, 1, 
        10, 0, 0, 0, 0, 0));

Source available

DICOMHERO comes with full source code.
Commercial royalty-free licenses and support are available.

Self-contained

DICOMHERO depends only on the default OS libraries.


Multi-platform

DICOMHERO runs on:

  • Linux
  • Windows
  • iOS
  • macOS
  • Android

Multi-language

Written in C++, wrappers for:

  • Java
  • Objective-C
  • Swift