Commit 40551925 authored by Barry Warsaw's avatar Barry Warsaw

Cache conversions from triplets to rrggbb's and vice versa. Wasteful

on space, but improves performance.  Also use map to calculate
triplet_to_pmwrgb().
parent 437f8d16
......@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment