digiKam
Loading...
Searching...
No Matches
contentawarefilter.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2009-02-01
7 * Description : Content aware resizer class.
8 *
9 * SPDX-FileCopyrightText: 2009 by Julien Pontabry <julien dot pontabry at ulp dot u-strasbg dot fr>
10 * SPDX-FileCopyrightText: 2009-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 * SPDX-FileCopyrightText: 2010 by Martin Klapetek <martin dot klapetek at gmail dot com>
12 *
13 * SPDX-License-Identifier: GPL-2.0-or-later
14 *
15 * ============================================================ */
16
17#pragma once
18
19// Qt includes
20
21#include <QImage>
22
23// Local includes
24
25#include "digikam_config.h"
26#include "dcolor.h"
27#include "digikam_export.h"
28#include "dimgthreadedfilter.h"
29
30namespace Digikam
31{
32
33class DIGIKAM_EXPORT ContentAwareContainer
34{
35
36public:
37
47
48public:
49
52
53public:
54
55 bool preserve_skin_tones = false;
56
57 uint width = 0;
58 uint height = 0;
59
60 int step = 1;
61 int side_switch_freq = 4;
62
63 double rigidity = 0.0;
64
65 QImage mask;
66
67 EnergyFunction func = GradientNorm;
68 Qt::Orientation resize_order = Qt::Horizontal;
69};
70
71// -----------------------------------------------------------------------------------------
72
73class DIGIKAM_EXPORT ContentAwareFilter : public DImgThreadedFilter
74{
75 Q_OBJECT
76
77public:
78
79 explicit ContentAwareFilter(QObject* const parent = nullptr);
80 explicit ContentAwareFilter(DImg* const orgImage,
81 QObject* const parent = nullptr,
83 ~ContentAwareFilter() override;
84
85 void progressCallback(int progress);
86
87 static QString FilterIdentifier()
88 {
89 return QLatin1String("digikam:ContentAwareFilter");
90 }
91
92 static QString DisplayableName();
93
94 static QList<int> SupportedVersions()
95 {
96 return QList<int>() << 1;
97 }
98
99 static int CurrentVersion()
100 {
101 return 1;
102 }
103
104 QString filterIdentifier() const override
105 {
106 return FilterIdentifier();
107 }
108
109 FilterAction filterAction() override;
110 void readParameters(const FilterAction& action) override;
111
112private:
113
114 void cancelFilter() override;
115 void filterImage() override;
116
117 void buildBias(const QImage& mask);
118 void buildSkinToneBias();
119 inline bool isSkinTone(const DColor& c);
120 void getEnergyImage();
121
122private:
123
124 class Private;
125 Private* const d = nullptr;
126};
127
128} // namespace Digikam
Definition contentawarefilter.h:34
EnergyFunction
Definition contentawarefilter.h:39
@ SumOfAbsoluteValues
Definition contentawarefilter.h:41
@ LumaGradientNorm
Definition contentawarefilter.h:43
@ LumaSumOfAbsoluteValues
Definition contentawarefilter.h:44
@ XAbsoluteValue
Definition contentawarefilter.h:42
QImage mask
Definition contentawarefilter.h:65
Definition contentawarefilter.h:74
QString filterIdentifier() const override
Definition contentawarefilter.h:104
static QString FilterIdentifier()
Definition contentawarefilter.h:87
static int CurrentVersion()
Definition contentawarefilter.h:99
static QList< int > SupportedVersions()
Definition contentawarefilter.h:94
Definition dcolor.h:33
Definition dimgthreadedfilter.h:31
Definition dimg.h:52
Definition filteraction.h:33
Definition datefolderview.cpp:34