digiKam
Loading...
Searching...
No Matches
raindropfilter.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 : Raindrop threaded image filter.
8 *
9 * SPDX-FileCopyrightText: 2005-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 * SPDX-FileCopyrightText: 2006-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"
25
26class QRect;
27
28namespace Digikam
29{
30
31class DIGIKAM_EXPORT RainDropFilter : public DImgThreadedFilter
32{
33 Q_OBJECT
34
35private:
36
37 class Q_DECL_HIDDEN Args
38 {
39 public:
40
41 Args() = default;
42
43 uint start = 0;
44 uint stop = 0;
45 DImg* orgImage = nullptr;
46 DImg* destImage = nullptr;
47 int MinDropSize = 0;
48 int MaxDropSize = 0;
49 int Coeff = 0;
50 bool bLimitRange = false;
51 uchar* pStatusBits = nullptr;
52 };
53
54public:
55
56 explicit RainDropFilter(QObject* const parent = nullptr);
57 explicit RainDropFilter(DImg* const orgImage,
58 QObject* const parent = nullptr,
59 int drop = 80,
60 int amount = 150,
61 int coeff = 30,
62 const QRect& selection = QRect(0, 0, 0, 0));
63 ~RainDropFilter() override;
64
65 static QString FilterIdentifier()
66 {
67 return QLatin1String("digikam:RainDropFilter");
68 }
69
70 static QString DisplayableName();
71
72 static QList<int> SupportedVersions()
73 {
74 return QList<int>() << 1;
75 }
76
77 static int CurrentVersion()
78 {
79 return 1;
80 }
81
82 QString filterIdentifier() const override
83 {
84 return FilterIdentifier();
85 }
86
87 FilterAction filterAction() override;
88
89 void readParameters(const FilterAction& action) override;
90
91private:
92
93 void filterImage() override;
94
95 void rainDropsImage(DImg* const orgImage, DImg* const destImage, int MinDropSize, int MaxDropSize,
96 int Amount, int Coeff, bool bLimitRange, int progressMin, int progressMax);
97
98 void rainDropsImageMultithreaded(const Args& prm);
99
100 bool CreateRainDrop(uchar* const pBits, int Width, int Height, bool sixteenBit, int bytesDepth,
101 uchar* const pResBits, uchar* const pStatusBits,
102 int X, int Y, int DropSize, double Coeff, bool bLimitRange);
103
104 bool CanBeDropped(int Width, int Height, uchar* const pStatusBits, int X, int Y, int DropSize, bool bLimitRange);
105
106 bool SetDropStatusBits(int Width, int Height, uchar* const pStatusBits, int X, int Y, int DropSize);
107
113 inline int limitValues8(int ColorValue);
114
115 inline int limitValues16(int ColorValue);
116
117 inline bool isInside (int Width, int Height, int X, int Y);
118
119 inline int pixelOffset(int Width, int X, int Y, int bytesDepth);
120
121private:
122
123 class Private;
124 Private* const d = nullptr;
125};
126
127} // namespace Digikam
Definition dimgthreadedfilter.h:31
Definition dimg.h:52
Definition filteraction.h:33
Definition raindropfilter.h:32
static QList< int > SupportedVersions()
Definition raindropfilter.h:72
static int CurrentVersion()
Definition raindropfilter.h:77
QString filterIdentifier() const override
Definition raindropfilter.h:82
static QString FilterIdentifier()
Definition raindropfilter.h:65
#define X
Definition datefolderview.cpp:34