void ChangeResolutionAction::Perform(class ArtifactSet &artifacts, class ProgressListener &listener) { TimeFrequencyData oldContaminated = artifacts.ContaminatedData(); if(_timeDecreaseFactor != 1) { ArtifactSet artifactsCopy(artifacts); artifactsCopy.SetNoImageSet(); DecreaseTime(artifactsCopy.OriginalData()); DecreaseTime(artifactsCopy.ContaminatedData()); DecreaseTime(artifactsCopy.RevisedData()); PerformFrequencyChange(artifactsCopy, listener); IncreaseTime(artifacts.OriginalData(), artifactsCopy.OriginalData(), false, false); IncreaseTime(artifacts.ContaminatedData(), artifactsCopy.ContaminatedData(), _restoreContaminated, _restoreMasks); IncreaseTime(artifacts.RevisedData(), artifactsCopy.RevisedData(), _restoreRevised, _restoreMasks); } else { PerformFrequencyChange(artifacts, listener); } if(_restoreRevised && !_restoreContaminated) { oldContaminated.Subtract(artifacts.RevisedData()); if(_restoreMasks) oldContaminated.SetMask(artifacts.ContaminatedData()); artifacts.SetContaminatedData(oldContaminated); } }
void ChangeResolutionAction::PerformFrequencyChange(class ArtifactSet &artifacts, class ProgressListener &listener) { if(_frequencyDecreaseFactor != 1) { ArtifactSet artifactsCopy(artifacts); artifactsCopy.SetNoImageSet(); TimeFrequencyData oldContaminated = artifacts.ContaminatedData(); DecreaseFrequency(artifactsCopy.OriginalData()); DecreaseFrequency(artifactsCopy.ContaminatedData()); DecreaseFrequency(artifactsCopy.RevisedData()); ActionBlock::Perform(artifactsCopy, listener); IncreaseFrequency(artifacts.OriginalData(), artifactsCopy.OriginalData(), false, false); IncreaseFrequency(artifacts.ContaminatedData(), artifactsCopy.ContaminatedData(), _restoreContaminated, _restoreMasks); IncreaseFrequency(artifacts.RevisedData(), artifactsCopy.RevisedData(), _restoreRevised, _restoreMasks); if(_restoreRevised) { TimeFrequencyData *contaminatedData = TimeFrequencyData::CreateTFDataFromDiff(oldContaminated, artifacts.RevisedData()); contaminatedData->SetMask(oldContaminated); artifacts.SetContaminatedData(*contaminatedData); delete contaminatedData; } } else { ActionBlock::Perform(artifacts, listener); } }