in src/wsiToDcm.cpp [197:258]
std::string WsiToDcm::initOpenSlide() {
svsLevelCount_ = openslide_get_level_count(getOpenSlidePtr());
// Openslide API call 0 returns dimensions of highest resolution image.
openslide_get_level_dimensions(getOpenSlidePtr(), 0,
&largestSlideLevelWidth_,
&largestSlideLevelHeight_);
std::string vendor(openslide_get_property_value(getOpenSlidePtr(),
OPENSLIDE_PROPERTY_NAME_VENDOR));
BOOST_LOG_TRIVIAL(info) << "Reading " << vendor.c_str() << " formatted WSI.";
if (vendor == "dicom") {
wsiRequest_->startOnLevel = std::max(wsiRequest_->startOnLevel, 1);
}
tiffFile_ = nullptr;
if (wsiRequest_->SVSImportPreferScannerTileingForAllLevels ||
wsiRequest_->SVSImportPreferScannerTileingForLargestLevel) {
bool useSVSTileing = false;
if (vendor == "aperio" || vendor == "generic-tiff") {
tiffFile_ = std::make_unique<TiffFile>(wsiRequest_->inputFile);
if (tiffFile_->isLoaded()) {
int32_t level = tiffFile_->getDirectoryIndexMatchingImageDimensions(
largestSlideLevelWidth_, largestSlideLevelHeight_);
if (level != -1) {
tiffFile_ = std::make_unique<TiffFile>(*tiffFile_, level);
TiffFrame tiffFrame(tiffFile_.get(), 0, true);
if (!tiffFrame.tiffDirectory()->isJpeg2kCompressed() &&
!tiffFrame.tiffDirectory()->isJpegCompressed()) {
BOOST_LOG_TRIVIAL(error) << "Tiff contains unexpected format.";
throw 1;
} else if (tiffFrame.tiffDirectory()->isJpegCompressed() &&
!tiffFrame.canDecodeJpeg()) {
BOOST_LOG_TRIVIAL(error) << "Error decoding JPEG in SVS.";
throw 1;
} else {
const TiffDirectory * tiffDir = tiffFile_->directory(level);
BOOST_LOG_TRIVIAL(info) << "Reading JPEG tiles from SVS with "
"out decoding.";
int oldX = wsiRequest_->frameSizeX;
int oldY = wsiRequest_->frameSizeY;
wsiRequest_->frameSizeX = tiffDir->tileWidth();
wsiRequest_->frameSizeY = tiffDir->tileHeight();
BOOST_LOG_TRIVIAL(info) << "Changing generated DICOM tile size "
"to jpeg tile size defined in svs. "
"Command line specified tile size: " <<
oldX << ", " << oldY << ". Changed to"
" svs jpeg tile size: " <<
wsiRequest_->frameSizeX << ", " <<
wsiRequest_->frameSizeY;
useSVSTileing = true;
}
tiffFile_->close();
}
}
}
if (!useSVSTileing) {
wsiRequest_->SVSImportPreferScannerTileingForLargestLevel = false;
wsiRequest_->SVSImportPreferScannerTileingForAllLevels = false;
}
}
BOOST_LOG_TRIVIAL(debug) << " ";
BOOST_LOG_TRIVIAL(debug) << "Level Count: " << svsLevelCount_;
return vendor;
}