# HG changeset patch # User Paul Boddie # Date 1444170948 -7200 # Node ID 2163b1916849b1fd6b67d6d8627150afeebeb8da # Parent 6adea19bfcc290ccdfeed2d4a5c8182b31ab0201 Cache colour lookup results and avoid unnecessary pixel operations. diff -r 6adea19bfcc2 -r 2163b1916849 optimiser.py --- a/optimiser.py Tue Oct 06 22:22:52 2015 +0200 +++ b/optimiser.py Wed Oct 07 00:35:48 2015 +0200 @@ -41,15 +41,19 @@ def invert(srgb): return tuple(map(lambda x: 1.0 - x, srgb)) +cache = {} + def combination(rgb): - rgb = square(scale(rgb)) - rgbi = invert(rgb) - pairs = zip(rgbi, rgb) - d = [] - for corner in corners: - rs, gs, bs = scale(corner) - d.append((pairs[0][int(rs)] * pairs[1][int(gs)] * pairs[2][int(bs)], corner)) - return balance(d) + if not cache.has_key(rgb): + rgb = square(scale(rgb)) + rgbi = invert(rgb) + pairs = zip(rgbi, rgb) + d = [] + for corner in corners: + rs, gs, bs = scale(corner) + d.append((pairs[0][int(rs)] * pairs[1][int(gs)] * pairs[2][int(bs)], corner)) + cache[rgb] = balance(d) + return cache[rgb] def complements(rgb): r, g, b = rgb @@ -213,15 +217,12 @@ if saturate or desaturate or darken or brighten: for y in range(0, height): for x in range(0, width): + rgb = im.getpixel((x, y)) if saturate or desaturate: - rgb = im.getpixel((x, y)) rgb = saturate_rgb(rgb, saturate and math.pow(0.5, saturate) or math.pow(2, desaturate)) - im.putpixel((x, y), rgb) - if darken or brighten: - rgb = im.getpixel((x, y)) rgb = amplify_rgb(rgb, brighten and math.pow(0.5, brighten) or math.pow(2, darken)) - im.putpixel((x, y), rgb) + im.putpixel((x, y), rgb) if preview: imp = im.copy()