digiKam
Loading...
Searching...
No Matches
filmgrainfilter.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 : 2005-05-25
7 * Description : filter to add Film Grain to image.
8 *
9 * SPDX-FileCopyrightText: 2005-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 * SPDX-FileCopyrightText: 2005-2010 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
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// Local includes
20
21#include "digikam_export.h"
22#include "dimgthreadedfilter.h"
23#include "digikam_globals.h"
24#include "dcolor.h"
25
26namespace Digikam
27{
28
29class DIGIKAM_EXPORT FilmGrainContainer
30{
31
32public:
33
34 FilmGrainContainer() = default;
36
37 bool isDirty() const
38 {
39 return (addLuminanceNoise || addChrominanceBlueNoise || addChrominanceRedNoise);
40 };
41
42public:
43
44 int grainSize = 1;
45 bool photoDistribution = false;
46
47 bool addLuminanceNoise = true;
48 int lumaIntensity = 25;
49 int lumaShadows = -100;
50 int lumaMidtones = 0;
51 int lumaHighlights = -100;
52
53 bool addChrominanceBlueNoise = false;
54 int chromaBlueIntensity = 25;
55 int chromaBlueShadows = -100;
56 int chromaBlueMidtones = 0;
57 int chromaBlueHighlights = -100;
58
59 bool addChrominanceRedNoise = false;
60 int chromaRedIntensity = 25;
61 int chromaRedShadows = -100;
62 int chromaRedMidtones = 0;
63 int chromaRedHighlights = -100;
64};
65
66// -----------------------------------------------------------------------------------------------
67
68class DIGIKAM_EXPORT FilmGrainFilter : public DImgThreadedFilter
69{
70 Q_OBJECT
71
72public:
73
74 explicit FilmGrainFilter(QObject* const parent = nullptr);
75 explicit FilmGrainFilter(DImg* const orgImage, QObject* const parent = nullptr,
76 const FilmGrainContainer& settings = FilmGrainContainer());
77
81 explicit FilmGrainFilter(DImgThreadedFilter* const parentFilter, const DImg& orgImage, const DImg& destImage,
82 int progressBegin = 0, int progressEnd = 100,
83 const FilmGrainContainer& settings = FilmGrainContainer());
84 ~FilmGrainFilter() override;
85
86
87 static QString FilterIdentifier()
88 {
89 return QLatin1String("digikam:FilmGrainFilter");
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 void readParameters(const FilterAction& action) override;
105
106 QString filterIdentifier() const override
107 {
108 return FilterIdentifier();
109 }
110
111 FilterAction filterAction() override;
112
113private:
114
115 void filterImage() override;
116
117 void filmgrainMultithreaded(uint start, uint stop);
118
119 inline void computeNoiseSettings(const DColor& col,
120 double& luRange, double& luNoise,
121 double& cbRange, double& cbNoise,
122 double& crRange, double& crNoise);
123 inline double interpolate(int shadows, int midtones, int highlights, const DColor& col);
124 inline double randomizeUniform(double range);
125 inline double randomizeGauss(double sigma);
126 inline double randomizePoisson(double lambda);
127 inline void adjustYCbCr(DColor& col, double range, double nRand, int channel);
128
129private:
130
131 class Private;
132 Private* const d = nullptr;
133};
134
135} // namespace Digikam
Definition dcolor.h:33
Definition dimgthreadedfilter.h:31
Definition dimg.h:52
Definition filmgrainfilter.h:30
bool isDirty() const
Definition filmgrainfilter.h:37
Definition filmgrainfilter.h:69
static QList< int > SupportedVersions()
Definition filmgrainfilter.h:94
static QString FilterIdentifier()
Definition filmgrainfilter.h:87
static int CurrentVersion()
Definition filmgrainfilter.h:99
QString filterIdentifier() const override
Definition filmgrainfilter.h:106
Definition filteraction.h:33
Definition datefolderview.cpp:34