WindowLevel WindowLevelHelper::getCurrentAutomaticWindowLevel(Volume *volume) { WindowLevel automaticWindowLevel; automaticWindowLevel.setName(QObject::tr("Auto")); if (volume) { double range[2]; volume->getScalarRange(range); double windowWidth = range[1] - range[0]; if (VolumeHelper::isPrimaryPET(volume) || VolumeHelper::isPrimaryNM(volume)) { windowWidth *= DefaultPETWindowWidthThreshold; } double windowCenter = range[0] + (windowWidth * 0.5); // If MONOCHROME1 image, window/level is inverted Image *image = volume->getImage(0); if (image && image->getPhotometricInterpretation() == PhotometricInterpretation::Monochrome1) { windowWidth = -windowWidth; } automaticWindowLevel.setWidth(windowWidth); automaticWindowLevel.setCenter(windowCenter); } else { DEBUG_LOG("No input to compute automatic ww/wl. Undefined values."); } return automaticWindowLevel; }
QList<WindowLevel*> CustomWindowLevelsReader::readFile(const QString &path) { QFile file(path); if (!file.open(QFile::ReadOnly | QFile::Text)) { return QList<WindowLevel*>(); } if (!m_customWindowLevelsSchemaValidator.validate(QUrl::fromLocalFile(file.fileName()))) { DEBUG_LOG("No es processa perquè es invalid"); return QList<WindowLevel*>(); } QList<WindowLevel*> listOfCustomWindowLevels; QXmlStreamReader reader(&file); if (reader.readNextStartElement()) { if (reader.name() == "CustomWindowLevels") { while (reader.readNextStartElement()) { if (reader.name() == "CustomWindowLevel") { WindowLevel *customWindowLevel = new WindowLevel(); QString name = reader.attributes().first().value().toString(); customWindowLevel->setName(name); while (reader.readNextStartElement()) { if (reader.name() == "width") { customWindowLevel->setWidth(reader.readElementText().toDouble()); } else if (reader.name() == "level") { customWindowLevel->setCenter(reader.readElementText().toDouble()); } } listOfCustomWindowLevels.append(customWindowLevel); } } } } return listOfCustomWindowLevels; }
void VolumeDisplayUnit::updateCurrentImageDefaultPresets() { if (getViewPlane() == OrthogonalPlane::XYPlane) { Image *image = getVolume()->getImage(m_sliceHandler->getCurrentSlice(), m_sliceHandler->getCurrentPhase()); if (image) { for (int i = 0; i < image->getNumberOfWindowLevels(); ++i) { WindowLevel windowLevel = WindowLevelHelper().getDefaultWindowLevelForPresentation(image, i); m_windowLevelData->updatePreset(windowLevel); } } } WindowLevel wl = m_windowLevelData->getCurrentPreset(); m_imagePipeline->setWindowLevel(wl.getWidth(), wl.getCenter()); }
WindowLevel WindowLevelHelper::getDefaultWindowLevelForPresentation(Image *image, int index) { if (!image) { return WindowLevel(); } WindowLevel windowLevel = image->getWindowLevel(index); if (windowLevel.isValid()) { if (image->getPhotometricInterpretation() == PhotometricInterpretation::Monochrome1) { windowLevel.setWidth(-windowLevel.getWidth()); } if (windowLevel.getName().isEmpty()) { windowLevel.setName(getDefaultWindowLevelDescription(index)); } } return windowLevel; }
void VolumeDisplayUnit::updateWindowLevel(const WindowLevel &windowLevel) { m_windowLevelData->setCurrentPreset(windowLevel); m_imagePipeline->setWindowLevel(windowLevel.getWidth(), windowLevel.getCenter()); }