digiKam
Loading...
Searching...
No Matches
mixerfilter.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-24-01
7 * Description : Channels mixer filter
8 *
9 * SPDX-FileCopyrightText: 2005-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 * SPDX-FileCopyrightText: 2010 by Martin Klapetek <martin dot klapetek at gmail dot com>
11 *
12 * SPDX-License-Identifier: GPL-2.0-or-later
13 *
14 * ============================================================ */
15
16#pragma once
17
18// Local includes
19
20#include "digikam_export.h"
21#include "dimgthreadedfilter.h"
22#include "digikam_globals.h"
23
24namespace Digikam
25{
26
27class DImg;
28
29class DIGIKAM_EXPORT MixerContainer
30{
31
32public:
33
34 MixerContainer() = default;
35 ~MixerContainer() = default;
36
37public:
38
39 bool bPreserveLum = true;
40 bool bMonochrome = false;
41
42 // Standard settings.
43 double redRedGain = 1.0;
44 double redGreenGain = 0.0;
45 double redBlueGain = 0.0;
46 double greenRedGain = 0.0;
47 double greenGreenGain = 1.0;
48 double greenBlueGain = 0.0;
49 double blueRedGain = 0.0;
50 double blueGreenGain = 0.0;
51 double blueBlueGain = 1.0;
52
53 // Monochrome settings.
54 double blackRedGain = 1.0;
55 double blackGreenGain = 0.0;
56 double blackBlueGain = 0.0;
57};
58
59// -----------------------------------------------------------------------------------------------
60
61class DIGIKAM_EXPORT MixerFilter : public DImgThreadedFilter
62{
63 Q_OBJECT
64
65public:
66
67 explicit MixerFilter(QObject* const parent = nullptr);
68 explicit MixerFilter(DImg* const orgImage,
69 QObject* const parent = nullptr,
70 const MixerContainer& settings = MixerContainer());
71 ~MixerFilter() override;
72
73 static QString FilterIdentifier()
74 {
75 return QLatin1String("digikam:MixerFilter");
76 }
77
78 static QString DisplayableName();
79
80 static QList<int> SupportedVersions()
81 {
82 return QList<int>() << 1;
83 }
84
85 static int CurrentVersion()
86 {
87 return 1;
88 }
89
90 QString filterIdentifier() const override
91 {
92 return FilterIdentifier();
93 }
94
95 FilterAction filterAction() override;
96 void readParameters(const FilterAction& action) override;
97
98private:
99
100 void filterImage() override;
101
102 inline double CalculateNorm(double RedGain, double GreenGain, double BlueGain, bool bPreserveLum);
103
104 inline unsigned short MixPixel(double RedGain, double GreenGain, double BlueGain,
105 unsigned short R, unsigned short G, unsigned short B, bool sixteenBit,
106 double Norm);
107
108private:
109
110 MixerContainer m_settings;
111};
112
113} // namespace Digikam
Definition dimgthreadedfilter.h:31
Definition dimg.h:52
Definition filteraction.h:33
Definition mixerfilter.h:30
Definition mixerfilter.h:62
static int CurrentVersion()
Definition mixerfilter.h:85
static QList< int > SupportedVersions()
Definition mixerfilter.h:80
static QString FilterIdentifier()
Definition mixerfilter.h:73
QString filterIdentifier() const override
Definition mixerfilter.h:90
Definition datefolderview.cpp:34