summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMattias Andrée <maandree@operamail.com>2014-03-10 16:46:02 +0100
committerMattias Andrée <maandree@operamail.com>2014-03-10 16:46:02 +0100
commitee1044c6836ceea91497f36c561b46cc827f229e (patch)
treed5b4338d7de51e0c2532d3f1d5904a6467e16aea /src
parentm doc (diff)
downloadblueshift-ee1044c6836ceea91497f36c561b46cc827f229e.tar.gz
blueshift-ee1044c6836ceea91497f36c561b46cc827f229e.tar.bz2
blueshift-ee1044c6836ceea91497f36c561b46cc827f229e.tar.xz
make clip, linearise and standardise more flexible by making it possible to restrict which colour curves to affect
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to '')
-rw-r--r--src/curve.py41
1 files changed, 29 insertions, 12 deletions
diff --git a/src/curve.py b/src/curve.py
index c69bdce..4ef52a4 100644
--- a/src/curve.py
+++ b/src/curve.py
@@ -298,24 +298,36 @@ def cie_brightness(level):
(r_curve[i], g_curve[i], b_curve[i]) = ciexyy_to_srgb(x, y, Y * level)
-def linearise():
+def linearise(r = True, g = None, b = None):
'''
Convert the curves from formatted in standard RGB to linear RGB
+
+ @param r:bool Whether to convert the red colour curve
+ @param g:bool? Whether to convert the green colour curve, defaults to `r` if `None`
+ @param b:bool? Whether to convert the blue colour curve, defaults to `r` if `None`
'''
+ if g is None: g = r
+ if b is None: b = r
for i in range(i_size):
- r, g, b = r_curve[i], g_curve[i], b_curve[i]
- (r, g, b) = standard_to_linear(r, g, b)
- r_curve[i], g_curve[i], b_curve[i] = r, g, b
+ sr, sg, sb = r_curve[i], g_curve[i], b_curve[i]
+ (lr, lg, lb) = standard_to_linear(sr, sg, sb)
+ r_curve[i], g_curve[i], b_curve[i] = (lr if r else sr), (lg if g else sg), (lb if b else sb)
-def standardise():
+def standardise(r = True, g = None, b = None):
'''
Convert the curves from formatted in linear RGB to standard RGB
+
+ @param r:bool Whether to convert the red colour curve
+ @param g:bool? Whether to convert the green colour curve, defaults to `r` if `None`
+ @param b:bool? Whether to convert the blue colour curve, defaults to `r` if `None`
'''
+ if g is None: g = r
+ if b is None: b = r
for i in range(i_size):
- r, g, b = r_curve[i], g_curve[i], b_curve[i]
- (r, g, b) = linear_to_standard(r, g, b)
- r_curve[i], g_curve[i], b_curve[i] = r, g, b
+ lr, lg, lb = r_curve[i], g_curve[i], b_curve[i]
+ (sr, sg, sb) = linear_to_standard(lr, lg, lb)
+ r_curve[i], g_curve[i], b_curve[i] = (sr if r else lr), (sg if g else lg), (sb if b else lb)
def gamma(r, g = None, b = None):
@@ -509,11 +521,16 @@ def start_over():
b_curve[i] = v
-def clip():
+def clip(r = True, g = None, b = None):
'''
Clip all values below the actual minimum and above actual maximums
+
+ @param r:bool Whether to clip the red colour curve
+ @param g:bool? Whether to clip the green colour curve, defaults to `r` if `None`
+ @param b:bool? Whether to clip the blue colour curve, defaults to `r` if `None`
'''
- for curve in (r_curve, g_curve, b_curve):
- for i in range(i_size):
- curve[i] = min(max(0.0, curve[i]), 1.0)
+ for curve, action in curves(r, r if g is None else g, r if b is None else b):
+ if action:
+ for i in range(i_size):
+ curve[i] = min(max(0.0, curve[i]), 1.0)