From 8d3e5ee552b70512b13a910da594b5c32f3e9c26 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Wed, 18 Feb 1998 00:02:26 +0000 Subject: Cache conversions from triplets to rrggbb's and vice versa. Wasteful on space, but improves performance. Also use map to calculate triplet_to_pmwrgb(). --- Tools/pynche/ColorDB.py | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/Tools/pynche/ColorDB.py b/Tools/pynche/ColorDB.py index f9ba27e..4e4045a 100644 --- a/Tools/pynche/ColorDB.py +++ b/Tools/pynche/ColorDB.py @@ -17,6 +17,7 @@ import sys import string import re from types import * +import operator class BadColor(Exception): pass @@ -143,17 +144,21 @@ def get_colordb(file, filetype=X_RGB_TXT): +_namedict = {} def rrggbb_to_triplet(color): """Converts a #rrggbb color to the tuple (red, green, blue).""" - if color[0] <> '#': - raise BadColor(color) - - red = color[1:3] - green = color[3:5] - blue = color[5:7] - return tuple(map(lambda v: string.atoi(v, 16), (red, green, blue))) - - + rgbtuple = _namedict.get(color) + if rgbtuple is None: + assert color[0] == '#' + red = color[1:3] + green = color[3:5] + blue = color[5:7] + rgbtuple = tuple(map(lambda v: string.atoi(v, 16), (red, green, blue))) + _namedict[color] = rgbtuple + return rgbtuple + + +_tripdict = {} def triplet_to_rrggbb(rgbtuple): """Converts a (red, green, blue) tuple to #rrggbb.""" def hexify(v): @@ -161,12 +166,16 @@ def triplet_to_rrggbb(rgbtuple): if len(hexstr) < 2: hexstr = '0' + hexstr return hexstr - return '#%s%s%s' % tuple(map(hexify, rgbtuple)) + hexname = _tripdict.get(rgbtuple) + if hexname is None: + hexname = '#%s%s%s' % tuple(map(hexify, rgbtuple)) + _tripdict[rgbtuple] = hexname + return hexname -def triplet_to_pmwrgb(rgbtuple, MAX=256.0): - r, g, b = rgbtuple - return r/MAX, g/MAX, b/MAX +_maxtuple = (256.0,) * 3 +def triplet_to_pmwrgb(rgbtuple): + return map(operator.__div__, rgbtuple, _maxtuple) -- cgit v0.12