digiKam
Loading...
Searching...
No Matches
localcontrastfilter.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-08-09
7 * Description : Enhance image with local contrasts (as human eye does).
8 * LDR ToneMapper zynaddsubfx.sourceforge.net/other/tonemapping
9 *
10 * SPDX-FileCopyrightText: 2009 by Julien Pontabry <julien dot pontabry at gmail dot com>
11 * SPDX-FileCopyrightText: 2009-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
12 * SPDX-FileCopyrightText: 2010 by Martin Klapetek <martin dot klapetek at gmail dot com>
13 *
14 * SPDX-License-Identifier: GPL-2.0-or-later
15 *
16 * ============================================================ */
17
18#pragma once
19
20// Qt includes
21
22#include <QImage>
23
24// Local includes
25
26#include "digikam_export.h"
27#include "dimgthreadedfilter.h"
28#include "digikam_globals.h"
30
31namespace Digikam
32{
33
34class DIGIKAM_EXPORT LocalContrastFilter : public DImgThreadedFilter
35{
36 Q_OBJECT
37
38private:
39
40 class Q_DECL_HIDDEN Args
41 {
42 public:
43
44 Args() = default;
45
46 uint start = 0;
47 uint stop = 0;
48 float a = 0.0F;
49 float* data = nullptr;
50 int sizex = 0;
51 int sizey = 0;
52 float blur = 0.0F;
53 float denormal_remove = 0.0F;
54 };
55
56public:
57
58 explicit LocalContrastFilter(QObject* const parent = nullptr);
59 explicit LocalContrastFilter(DImg* const image, QObject* const parent = nullptr,
61 ~LocalContrastFilter() override;
62
63 static QString FilterIdentifier()
64 {
65 return QLatin1String("digikam:LocalContrastFilter");
66 }
67
68 static QString DisplayableName();
69
70 static QList<int> SupportedVersions()
71 {
72 return QList<int>() << 2;
73 }
74
75 static int CurrentVersion()
76 {
77 return 2;
78 }
79
80 QString filterIdentifier() const override
81 {
82 return FilterIdentifier();
83 }
84
85 FilterAction filterAction() override;
86
87 void readParameters(const FilterAction& action) override;
88
89private:
90
91 void filterImage() override;
92
93 void processRgbImage(float* const img, int sizex, int sizey);
94 void process8bitRgbImage(unsigned char* const img, int sizex, int sizey);
95 void process16bitRgbImage(unsigned short* const img, int sizex, int sizey);
96
97 float func(float x1, float x2);
98
99 void inplaceBlur(float* const data, int sizex, int sizey, float blur);
100 void stretchContrast(float* const data, int datasize);
101
102 inline void rgb2hsv(const float& r, const float& g, const float& b, float& h, float& s, float& v);
103 inline void hsv2rgb(const float& h, const float& s, const float& v, float& r, float& g, float& b);
104
105 void blurMultithreaded(uint start, uint stop, float* const img, float* const blurimage);
106 void saturationMultithreaded(uint start, uint stop, float* const img, float* const srcimg);
107
108 void inplaceBlurYMultithreaded(const Args& prm);
109 void inplaceBlurXMultithreaded(const Args& prm);
110
111private:
112
113 class Private;
114 Private* const d = nullptr;
115};
116
117} // namespace Digikam
Definition dimgthreadedfilter.h:31
Definition dimg.h:52
Definition filteraction.h:33
Definition localcontrastcontainer.h:29
Definition localcontrastfilter.h:35
QString filterIdentifier() const override
Definition localcontrastfilter.h:80
static QString FilterIdentifier()
Definition localcontrastfilter.h:63
static QList< int > SupportedVersions()
Definition localcontrastfilter.h:70
static int CurrentVersion()
Definition localcontrastfilter.h:75
Definition datefolderview.cpp:34