void FilterActionFilter::filterImage() { d->appliedActions.clear(); d->errorMessage = QString(); const float progressIncrement = 1.0 / qMax(1,d->actions.size()); float progress = 0; postProgress(0); DImg img = m_orgImage; foreach (const FilterAction& action, d->actions) { kDebug() << "Replaying action" << action.identifier(); if (action.isNull()) { continue; } if (DImgBuiltinFilter::isSupported(action.identifier())) { DImgBuiltinFilter filter(action); if (!filter.isValid()) { d->errorMessage = i18n("Built-in transformation not supported"); if (d->continueOnError) { continue; } else { break; } } filter.apply(img); d->appliedActions << filter.filterAction(); } else { QScopedPointer<DImgThreadedFilter> filter (DImgFilterManager::instance()->createFilter(action.identifier(), action.version())); if (!filter) { d->errorMessage = i18n("Filter identifier or version is not supported"); if (d->continueOnError) { continue; } else { break; } } filter->readParameters(action); if (!filter->parametersSuccessfullyRead()) { d->errorMessage = filter->readParametersError(action); if (d->continueOnError) { continue; } else { break; } } // compute filter->setupAndStartDirectly(img, this, (int)progress, (int)(progress+progressIncrement)); img = filter->getTargetImage(); d->appliedActions << filter->filterAction(); } progress += progressIncrement; postProgress((int)progress); } m_destImage = img; }