Thanks,
Toby
In [43]: possible = []
In [44]: for i in range(2**8):
....: h = hex(i).lstrip('0x')
....: while len(h) < 2:
....: h = '0' + h
....: possible.append(h)
....:
....:
In [45]: full = [r + g + b for r in possible for g in possible for b
in possible]
In [46]: len(full)
Out[46]: 16777216
In [47]: 2**24
Out[47]: 16777216
Look at the colorsys module.
http://docs.python.org/library/colorsys.html?highlight=colorsys#module-colorsys
That so rocks. Thanks!
How does that answer your original question?
Use the hue-saturation-value color space, and call hsv_to_rgb from the
standard Python library to convert to RGB. Enjoy!
Gary Herron
from colorsys import hsv_to_rgb
for hue ....:
rgb = hsv_to_rgb(hue, saturation, value)
Let 'hue' run from 0 (red) through 2/3 (blue) Hues from 2/3 to 1 get
into purples and magentas, which are not spectral (i.e., rainbow) colors.
Set 'saturation' to perhaps 0.5 (for a washed out effect) through 1.0
(for pure color). Even an intensely colorful rainbow has lots of white
light mixed in with it; a saturation of 0.5 is probably good.
Set 'value' to something in the range of 0 to 1 to control brightness.
I was able to do this:
import colorsys
sat = 1
value = 1
length = 1000
for x in range(0, length + 1):
hue = x / float(length)
color = list(colorsys.hsv_to_rgb(hue, sat, value))
for x in range(3):
color[x] = int(color[x] * 255)
hexval = ("#%02x%02x%02x" % tuple(color)).upper()
print "<div style='height: 1; width: 500; background-color: %s'>"
% hexval
Roy G. Biv would like you to order the colors according to their
wavelength. He would also like to see Orange and Yellow appear in
your rainbow.
> for x in range(0, length + 1):
> ...
> for x in range(3):
You should use different variables for the two loops.
Neil
Actually it is closing the divs that makes it work in FireFox:
import colorsys
sat = 1
value = 1
length = 1000
for h in range(0, length + 1):
hue = h / float(length)
color = list(colorsys.hsv_to_rgb(hue, sat, value))
for x in range(3):
color[x] = int(color[x] * 255)
hexval = ("#%02x%02x%02x" % tuple(color)).upper()
print(
"<div style='height: 1; width: 500; background-color: %s'>"
"</div>" % hexval)
I see. It appears I misunderstood the question.
The link doesn't work in Chrome btw.
Hah. I new that the rainbow wasn't complete and that it
didn't work in Opera. I just fizzled on the closing of the
divs.
I also don't get why it worked at all when I was stomping
on my x variable in the inside loop.
It's better now.
Better than before ... Oy G. Bivr
Uh, the first color is #FF0000, pure red, not orange.
--
Robert Kern
"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco
Ah, you're right, but it's only 1 pixel high so it's hard to
see. The last one is also #FF0000, pure red ... Roy G. Bivr
if you mean real rainbows when you say "rainbow", as rainbows go from
low to high wavelengths and you have to specify colors to your display
in RGB, i think that you have to read, e.g.,
http://www.physics.sfasu.edu/astro/color.html
otoh if you mean simply a continuos palette with varying hues,
excellent answers were already posted
hth
g
--
compro mobili vecchi - vendo mobili antichi