Solving issue 2610: "Display curve node input/output values" + add a new tone curve mode (Luminance)

This commit is contained in:
Hombrenatureh.510
2015-05-21 00:07:22 +02:00
parent 06deac5da4
commit 7c0b8e6fe1
41 changed files with 1434 additions and 239 deletions

View File

@@ -585,6 +585,11 @@ class WeightedStdToneCurve : public ToneCurve {
void Apply(float& r, float& g, float& b) const;
};
class LuminanceToneCurve : public ToneCurve {
public:
void Apply(float& r, float& g, float& b) const;
};
class WeightedStdToneCurvebw : public ToneCurve {
private:
float Triangle(float refX, float refY, float X2) const;
@@ -670,6 +675,18 @@ inline void AdobeToneCurvebw::RGBTone (float& r, float& g, float& b) const {
g = b + ((r - b) * (gold - bold) / (rold - bold));
}
// Modifying the Luminance channel only
inline void LuminanceToneCurve::Apply(float &r, float &g, float &b) const {
assert (lutToneCurve);
float currLuminance = r*0.2126729f + g*0.7151521f + b*0.0721750f;
float newLuminance = lutToneCurve[currLuminance];
float coef = newLuminance/currLuminance;
r = LIM<float>(r*coef, 0.f, 65535.f);
g = LIM<float>(g*coef, 0.f, 65535.f);
b = LIM<float>(b*coef, 0.f, 65535.f);
}
inline float WeightedStdToneCurve::Triangle(float a, float a1, float b) const {
if (a != b) {
float b1;