libavg has always supported specifying colors in html-like fashion: You pass a string of six hex digits, two each for the red, green and blue components of the color. That’s nice if you’re copying the code from Gimp or Photoshop, but it was quite limiting if you wanted to actually calculate colors or maybe interpolate between two colors.
So… there’s a shiny new Color
class
that can be constructed from a tuple and passed
whereever color strings were expected before (of
course, strings still work). Colors can be mixed and
used in animations. Last but not least, I did some
research on smart ways to mix colors. It turns out
that a simple weighed average of the RGB components
doesn’t look so good – for instance,
mixing 50% red with 50% yellow results gives you
gray. So libavg now mixes in CIE L’ch color
space, which more-or-less preserves the saturation
and looks pretty good.
As a result, you can now do this:
startColor = avg.Color("0000FF")
endColor = avg.Color("FFFF00")
for i in xrange(11):
color = avg.Color.mix(startColor, endColor, 1-(i/10.))
avg.RectNode(pos=(i*20,0), size=(20,20), fillcolor=color,
fillopacity=1.0, parent=rootNode)
to produce:
More infos on color mixing are in this blog post.