summaryrefslogtreecommitdiffstats
path: root/src/libs/levels/imagelevels.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/levels/imagelevels.h')
-rw-r--r--src/libs/levels/imagelevels.h105
1 files changed, 105 insertions, 0 deletions
diff --git a/src/libs/levels/imagelevels.h b/src/libs/levels/imagelevels.h
new file mode 100644
index 00000000..04d10d97
--- /dev/null
+++ b/src/libs/levels/imagelevels.h
@@ -0,0 +1,105 @@
+/* ============================================================
+ *
+ * This file is a part of digiKam project
+ * http://www.digikam.org
+ *
+ * Date : 2004-07-29
+ * Description : image levels manipulation methods.
+ *
+ * Copyright (C) 2004-2008 by Gilles Caulier <caulier dot gilles at gmail dot com>
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation;
+ * either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * ============================================================ */
+
+#ifndef IMAGELEVELS_H
+#define IMAGELEVELS_H
+
+#define CLAMP(x,l,u) ((x)<(l)?(l):((x)>(u)?(u):(x)))
+
+/* Map RGB to intensity */
+
+#define LEVELS_RGB_INTENSITY_RED 0.30
+#define LEVELS_RGB_INTENSITY_GREEN 0.59
+#define LEVELS_RGB_INTENSITY_BLUE 0.11
+#define LEVELS_RGB_INTENSITY(r,g,b) ((r) * LEVELS_RGB_INTENSITY_RED + \
+ (g) * LEVELS_RGB_INTENSITY_GREEN + \
+ (b) * LEVELS_RGB_INTENSITY_BLUE)
+
+// KDE includes.
+
+#include <kurl.h>
+
+// Local includes.
+
+#include "dcolor.h"
+#include "digikam_export.h"
+
+namespace Digikam
+{
+
+class ImageLevelsPriv;
+class ImageHistogram;
+
+class DIGIKAM_EXPORT ImageLevels
+{
+
+public:
+
+ ImageLevels(bool sixteenBit);
+ ~ImageLevels();
+
+ bool isDirty();
+ bool isSixteenBits();
+ void reset();
+
+ // Methods for to manipulate the levels data.
+
+ void levelsChannelReset(int channel);
+ void levelsAuto(ImageHistogram *hist);
+ void levelsChannelAuto(ImageHistogram *hist, int channel);
+ int levelsInputFromColor(int channel, const DColor& color);
+ void levelsBlackToneAdjustByColors(int channel, const DColor& color);
+ void levelsGrayToneAdjustByColors(int channel, const DColor& color);
+ void levelsWhiteToneAdjustByColors(int channel, const DColor& color);
+ void levelsCalculateTransfers();
+ float levelsLutFunc(int n_channels, int channel, float value);
+ void levelsLutSetup(int nchannels);
+ void levelsLutProcess(uchar *srcPR, uchar *destPR, int w, int h);
+
+ // Methods for to set manually the levels values.
+
+ void setLevelGammaValue(int Channel, double val);
+ void setLevelLowInputValue(int Channel, int val);
+ void setLevelHighInputValue(int Channel, int val);
+ void setLevelLowOutputValue(int Channel, int val);
+ void setLevelHighOutputValue(int Channel, int val);
+
+ double getLevelGammaValue(int Channel);
+ int getLevelLowInputValue(int Channel);
+ int getLevelHighInputValue(int Channel);
+ int getLevelLowOutputValue(int Channel);
+ int getLevelHighOutputValue(int Channel);
+
+ // Methods for to save/load the levels values to/from a Gimp levels text file.
+
+ bool saveLevelsToGimpLevelsFile(const KURL& fileUrl);
+ bool loadLevelsFromGimpLevelsFile(const KURL& fileUrl);
+
+private:
+
+ ImageLevelsPriv* d;
+};
+
+} // NameSpace Digikam
+
+#endif /* IMAGELEVELS_H */