in src/dicom_file_region_reader.cpp [35:65]
void DICOMFileFrameRegionReader::setDicomFiles(
std::vector<std::unique_ptr<AbstractDcmFile>> dcmFiles,
std::unique_ptr<TiffFile> tiffFile) {
// all files should have frames with same dimensions
clearDicomFiles();
dcmFiles_ = std::move(dcmFiles);
tiffFile_ = std::move(tiffFile); // Tiff file used to gen DICOM Frames
// nullptr if frames generated from
// prior level or openslide.
if (dcmFiles_.size() <= 0) {
clearDicomFiles();
return;
}
const AbstractDcmFile & first_dcm_file = (*dcmFiles_.at(0));
if (!first_dcm_file.frame(0)->hasRawABGRFrameBytes()) {
clearDicomFiles();
return;
}
frameWidth_ = first_dcm_file.frameWidth();
frameHeight_ = first_dcm_file.frameHeight();
imageWidth_ = first_dcm_file.imageWidth();
imageHeight_ = first_dcm_file.imageHeight();
// compute frames per row and column. Not final frames may
// not be used completely.
framesPerRow_ = static_cast<int64_t>(
std::ceil(static_cast<double>(imageWidth_) /
static_cast<double>(frameWidth_)));
framesPerColumn_ = static_cast<int64_t>(
std::ceil(static_cast<double>(imageHeight_) /
static_cast<double>(frameHeight_)));
}