inline OFCondition generateFramePositionMetadata()

in src/dcmtkUtils.cpp [45:81]


inline OFCondition generateFramePositionMetadata(DcmDataset* resultObject,
uint32_t numberOfFrames, uint32_t rowSize, uint32_t row, uint32_t column,
uint32_t x, uint32_t y) {
  std::unique_ptr<DcmSequenceOfItems> PerFrameFunctionalGroupsSequence =
      std::make_unique<DcmSequenceOfItems>(
          DCM_PerFrameFunctionalGroupsSequence);
  for (uint32_t frameNumber = 0; frameNumber < numberOfFrames; frameNumber++) {
    if (column > rowSize) {
      column = 1;
      row++;
    }
    std::string index = std::to_string(column) + "\\" + std::to_string(row);
    std::unique_ptr<DcmItem> dimension = std::make_unique<DcmItem>();
    dimension->putAndInsertString(DCM_DimensionIndexValues, index.c_str());

    std::unique_ptr<DcmSequenceOfItems> sequenceDimension =
        std::make_unique<DcmSequenceOfItems>(DCM_FrameContentSequence);
    sequenceDimension->insert(dimension.release());

    std::unique_ptr<DcmItem> pixelPosition = std::make_unique<DcmItem>();
    pixelPosition->putAndInsertSint32(DCM_ColumnPositionInTotalImagePixelMatrix,
                                      (column - 1) * x + 1);
    pixelPosition->putAndInsertSint32(DCM_RowPositionInTotalImagePixelMatrix,
                                      (row - 1) * y + 1);

    std::unique_ptr<DcmSequenceOfItems> sequencePosition =
        std::make_unique<DcmSequenceOfItems>(DCM_PlanePositionSlideSequence);
    sequencePosition->insert(pixelPosition.release());

    std::unique_ptr<DcmItem> positionItem = std::make_unique<DcmItem>();
    positionItem->insert(sequenceDimension.release());
    positionItem->insert(sequencePosition.release());
    PerFrameFunctionalGroupsSequence->insert(positionItem.release());
    column++;
  }
  return resultObject->insert(PerFrameFunctionalGroupsSequence.release());
}