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());
}