Implement load/save for FramingParams

* Implement writing FramingParams to keyfile
* Implement reading FramingParams from keyfile
This commit is contained in:
Daniel Gao 2024-11-07 17:41:18 -05:00
parent 8e68eccb85
commit d1148539bb
2 changed files with 190 additions and 0 deletions

View File

@ -427,6 +427,178 @@ bool saveToKeyfile(
return false;
}
namespace ProfileKeys {
#define DEFINE_KEY(VAR, NAME) \
constexpr const char* VAR = NAME;
DEFINE_KEY(TOOL_ENABLED, "Enabled");
namespace Framing
{
DEFINE_KEY(TOOL_NAME, "Framing");
// Fields
DEFINE_KEY(FRAMING_METHOD, "FramingMethod");
DEFINE_KEY(ASPECT_RATIO, "AspectRatio");
DEFINE_KEY(ORIENTATION, "Orientation");
DEFINE_KEY(FRAMED_WIDTH, "FramedWidth");
DEFINE_KEY(FRAMED_HEIGHT, "FramedHeight");
DEFINE_KEY(ALLOW_UPSCALING, "AllowUpscaling");
DEFINE_KEY(BORDER_SIZING_METHOD, "BorderSizingMethod");
DEFINE_KEY(BASIS, "Basis");
DEFINE_KEY(RELATIVE_BORDER_SIZE, "RelativeBorderSize");
DEFINE_KEY(MIN_SIZE_ENABLED, "MinSizeEnabled");
DEFINE_KEY(MIN_WIDTH, "MinWidth");
DEFINE_KEY(MIN_HEIGHT, "MinHeight");
DEFINE_KEY(ABS_WIDTH, "AbsWidth");
DEFINE_KEY(ABS_HEIGHT, "AbsHeight");
DEFINE_KEY(BORDER_RED, "BorderRed");
DEFINE_KEY(BORDER_GREEN, "BorderGreen");
DEFINE_KEY(BORDER_BLUE, "BorderBlue");
// Enum mappings
DEFINE_KEY(FRAMING_METHOD_STANDARD, "Standard");
DEFINE_KEY(FRAMING_METHOD_BBOX, "BoundingBox");
DEFINE_KEY(FRAMING_METHOD_FIXED_SIZE, "FixedSize");
DEFINE_KEY(ORIENT_AS_IMAGE, "AsImage");
DEFINE_KEY(ORIENT_LANDSCAPE, "Landscape");
DEFINE_KEY(ORIENT_PORTRAIT, "Portait");
DEFINE_KEY(BORDER_SIZING_PERCENTAGE, "Percentage");
DEFINE_KEY(BORDER_SIZING_FIXED_SIZE, "FixedSize");
DEFINE_KEY(BASIS_AUTO, "Auto");
DEFINE_KEY(BASIS_WIDTH, "Width");
DEFINE_KEY(BASIS_HEIGHT, "Height");
DEFINE_KEY(BASIS_LONG, "Long");
DEFINE_KEY(BASIS_SHORT, "Short");
} // namespace Framing
} // namespace ProfileKeys
void loadFramingParams(
const Glib::KeyFile& keyFile,
rtengine::procparams::FramingParams& params,
FramingParamsEdited& edited
)
{
using namespace ProfileKeys;
using namespace ProfileKeys::Framing;
using FramingParams = rtengine::procparams::FramingParams;
const Glib::ustring group{TOOL_NAME};
if (!keyFile.has_group(group)) return;
assignFromKeyfile(keyFile, group, TOOL_ENABLED, params.enabled, edited.enabled);
using FramingMethod = FramingParams::FramingMethod;
const std::map<std::string, FramingMethod> framingMethodMapping = {
{FRAMING_METHOD_STANDARD, FramingMethod::STANDARD},
{FRAMING_METHOD_BBOX, FramingMethod::BBOX},
{FRAMING_METHOD_FIXED_SIZE, FramingMethod::FIXED_SIZE}
};
assignFromKeyfile(keyFile, group, FRAMING_METHOD, framingMethodMapping, params.framingMethod, edited.framingMethod);
assignFromKeyfile(keyFile, group, ASPECT_RATIO, params.aspectRatio, edited.aspectRatio);
using Orientation = FramingParams::Orientation;
const std::map<std::string, Orientation> orientationMapping = {
{ORIENT_AS_IMAGE, Orientation::AS_IMAGE},
{ORIENT_LANDSCAPE, Orientation::LANDSCAPE},
{ORIENT_PORTRAIT, Orientation::PORTRAIT},
};
assignFromKeyfile(keyFile, group, ORIENTATION, orientationMapping, params.orientation, edited.orientation);
assignFromKeyfile(keyFile, group, FRAMED_WIDTH, params.framedWidth, edited.framedWidth);
assignFromKeyfile(keyFile, group, FRAMED_HEIGHT, params.framedHeight, edited.framedHeight);
assignFromKeyfile(keyFile, group, ALLOW_UPSCALING, params.allowUpscaling, edited.allowUpscaling);
using BorderSizing = FramingParams::BorderSizing;
const std::map<std::string, BorderSizing> borderSizingMapping = {
{BORDER_SIZING_PERCENTAGE, BorderSizing::PERCENTAGE},
{BORDER_SIZING_FIXED_SIZE, BorderSizing::FIXED_SIZE}
};
assignFromKeyfile(keyFile, group, BORDER_SIZING_METHOD, borderSizingMapping, params.borderSizingMethod, edited.borderSizingMethod);
using Basis = FramingParams::Basis;
const std::map<std::string, Basis> basisMapping = {
{BASIS_AUTO, Basis::AUTO},
{BASIS_WIDTH, Basis::WIDTH},
{BASIS_HEIGHT, Basis::HEIGHT},
{BASIS_LONG, Basis::LONG},
{BASIS_SHORT, Basis::SHORT}
};
assignFromKeyfile(keyFile, group, BASIS, basisMapping, params.basis, edited.basis);
assignFromKeyfile(keyFile, group, RELATIVE_BORDER_SIZE, params.relativeBorderSize, edited.relativeBorderSize);
assignFromKeyfile(keyFile, group, MIN_SIZE_ENABLED, params.minSizeEnabled, edited.minSizeEnabled);
assignFromKeyfile(keyFile, group, MIN_WIDTH, params.minWidth, edited.minWidth);
assignFromKeyfile(keyFile, group, MIN_HEIGHT, params.minHeight, edited.minHeight);
assignFromKeyfile(keyFile, group, ABS_WIDTH, params.absWidth, edited.absWidth);
assignFromKeyfile(keyFile, group, ABS_HEIGHT, params.absHeight, edited.absHeight);
assignFromKeyfile(keyFile, group, BORDER_RED, params.borderRed, edited.borderRed);
assignFromKeyfile(keyFile, group, BORDER_GREEN, params.borderGreen, edited.borderGreen);
assignFromKeyfile(keyFile, group, BORDER_BLUE, params.borderBlue, edited.borderBlue);
}
void saveFramingParams(
Glib::KeyFile& keyFile,
const rtengine::procparams::FramingParams& params,
const ParamsEdited* pedited
)
{
using namespace ProfileKeys;
using namespace ProfileKeys::Framing;
using FramingParams = rtengine::procparams::FramingParams;
const Glib::ustring group{TOOL_NAME};
const FramingParamsEdited& edited = pedited->framing;
saveToKeyfile(!pedited || edited.enabled, group, TOOL_ENABLED, params.enabled, keyFile);
using FramingMethod = FramingParams::FramingMethod;
const std::map<FramingMethod, const char*> framingMethodMapping = {
{FramingMethod::STANDARD, FRAMING_METHOD_STANDARD},
{FramingMethod::BBOX, FRAMING_METHOD_BBOX},
{FramingMethod::FIXED_SIZE, FRAMING_METHOD_FIXED_SIZE}
};
saveToKeyfile(!pedited || edited.framingMethod, group, FRAMING_METHOD, framingMethodMapping, params.framingMethod, keyFile);
saveToKeyfile(!pedited || edited.aspectRatio, group, ASPECT_RATIO, params.aspectRatio, keyFile);
using Orientation = FramingParams::Orientation;
const std::map<Orientation, const char*> orientationMapping = {
{Orientation::AS_IMAGE, ORIENT_AS_IMAGE},
{Orientation::LANDSCAPE, ORIENT_LANDSCAPE},
{Orientation::PORTRAIT, ORIENT_PORTRAIT},
};
saveToKeyfile(!pedited || edited.orientation, group, ORIENTATION, orientationMapping, params.orientation, keyFile);
saveToKeyfile(!pedited || edited.framedWidth, group, FRAMED_WIDTH, params.framedWidth, keyFile);
saveToKeyfile(!pedited || edited.framedHeight, group, FRAMED_HEIGHT, params.framedHeight, keyFile);
saveToKeyfile(!pedited || edited.allowUpscaling, group, ALLOW_UPSCALING, params.allowUpscaling, keyFile);
using BorderSizing = FramingParams::BorderSizing;
const std::map<BorderSizing, const char*> borderSizingMapping = {
{BorderSizing::PERCENTAGE, BORDER_SIZING_PERCENTAGE},
{BorderSizing::FIXED_SIZE, BORDER_SIZING_FIXED_SIZE}
};
saveToKeyfile(!pedited || edited.borderSizingMethod, group, BORDER_SIZING_METHOD, borderSizingMapping, params.borderSizingMethod, keyFile);
using Basis = FramingParams::Basis;
const std::map<Basis, const char*> basisMapping = {
{Basis::AUTO, BASIS_AUTO},
{Basis::WIDTH, BASIS_WIDTH},
{Basis::HEIGHT, BASIS_HEIGHT},
{Basis::LONG, BASIS_LONG},
{Basis::SHORT, BASIS_SHORT}
};
saveToKeyfile(!pedited || edited.basis, group, BASIS, basisMapping, params.basis, keyFile);
saveToKeyfile(!pedited || edited.relativeBorderSize, group, RELATIVE_BORDER_SIZE, params.relativeBorderSize, keyFile);
saveToKeyfile(!pedited || edited.minSizeEnabled, group, MIN_SIZE_ENABLED, params.minSizeEnabled, keyFile);
saveToKeyfile(!pedited || edited.minWidth, group, MIN_WIDTH, params.minWidth, keyFile);
saveToKeyfile(!pedited || edited.minHeight, group, MIN_HEIGHT, params.minHeight, keyFile);
saveToKeyfile(!pedited || edited.absWidth, group, ABS_WIDTH, params.absWidth, keyFile);
saveToKeyfile(!pedited || edited.absHeight, group, ABS_HEIGHT, params.absHeight, keyFile);
saveToKeyfile(!pedited || edited.borderRed, group, BORDER_RED, params.borderRed, keyFile);
saveToKeyfile(!pedited || edited.borderGreen, group, BORDER_GREEN, params.borderGreen, keyFile);
saveToKeyfile(!pedited || edited.borderBlue, group, BORDER_BLUE, params.borderBlue, keyFile);
}
} // namespace
@ -6401,6 +6573,8 @@ void ProcParams::setDefaults()
resize = {};
framing = {};
icm = {};
wavelet = {};
@ -7740,6 +7914,8 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->resize.shortedge, "Resize", "ShortEdge", resize.shortedge, keyFile);
saveToKeyfile(!pedited || pedited->resize.allowUpscaling, "Resize", "AllowUpscaling", resize.allowUpscaling, keyFile);
saveFramingParams(keyFile, framing, pedited);
// Post demosaic sharpening
saveToKeyfile(!pedited || pedited->pdsharpening.enabled, "PostDemosaicSharpening", "Enabled", pdsharpening.enabled, keyFile);
saveToKeyfile(!pedited || pedited->pdsharpening.contrast, "PostDemosaicSharpening", "Contrast", pdsharpening.contrast, keyFile);
@ -10261,6 +10437,8 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
}
}
loadFramingParams(keyFile, framing, pedited->framing);
if (keyFile.has_group ("Spot removal")) {
assignFromKeyfile(keyFile, "Spot removal", "Enabled", spot.enabled, pedited->spot.enabled);
int i = 0;

View File

@ -502,7 +502,9 @@ void Framing::readParams(const rtengine::procparams::ProcParams* pp)
aspectRatio->set_active(aspectRatioData->findIndex(params.aspectRatio));
orientation->set_active(mapOrientation(params.orientation));
width.setValue(params.framedWidth);
width.isDirty = false;
height.setValue(params.framedHeight);
height.isDirty = false;
allowUpscaling->set_active(params.allowUpscaling);
borderSizeMethod->set_active(mapBorderSizeMethod(params.borderSizingMethod));
@ -510,9 +512,13 @@ void Framing::readParams(const rtengine::procparams::ProcParams* pp)
relativeBorderSize->setValue(params.relativeBorderSize);
minSizeEnabled->set_active(params.minSizeEnabled);
minWidth.setValue(params.minWidth);
minWidth.isDirty = false;
minHeight.setValue(params.minHeight);
minHeight.isDirty = false;
absWidth.setValue(params.absWidth);
absWidth.isDirty = false;
absHeight.setValue(params.absHeight);
absHeight.isDirty = false;
redAdj->setValue(params.borderRed);
greenAdj->setValue(params.borderGreen);
@ -745,10 +751,12 @@ void Framing::onOrientationChanged()
void Framing::onWidthChanged()
{
width.isDirty = true;
}
void Framing::onHeightChanged()
{
height.isDirty = true;
}
void Framing::onAllowUpscalingToggled()
@ -771,16 +779,20 @@ void Framing::onMinSizeToggled()
void Framing::onMinWidthChanged()
{
minWidth.isDirty = true;
}
void Framing::onMinHeightChanged()
{
minHeight.isDirty = true;
}
void Framing::onAbsWidthChanged()
{
absWidth.isDirty = true;
}
void Framing::onAbsHeightChanged()
{
absHeight.isDirty = true;
}