# Converting from integers to output

Peter Maas peter.maas at mplusr.de
Thu Jul 15 11:04:00 CEST 2004

```Peter Maas schrieb:
> import cgi
>
> def longtorgb(c):
>     '''long to (r,g,b) tuple assuming that the
>     r bits are high and the b bits are low'''
[...]

Sorry, serious error. longtorgb is nonlinear so the _tuples_
have to be mixed, not the integers. You probably want to work
with tuples only so you can drop the conversion crap. Correct
code:

import cgi

def rgbtolong(rgb):
'''(r,g,b) tuple to long assuming that the
r bits are high and the b bits are low'''

return (rgb[0] << 16) + (rgb[1] << 8) + rgb[2]

def longtorgb(c):
'''long to (r,g,b) tuple assuming that the
r bits are high and the b bits are low'''

return ((c & 0xff0000) >> 16, (c & 0x00ff00) >> 8, c & 0xff)

if __name__ == '__main__':

form = cgi.FieldStorage()

# fetch input
#col1 = int(form['color1'].value)
#col2 = int(form['color2'].value)
col1 = 0xff      # blue
col2 = 0xff0000  # red
rcol1 = longtorgb(col1)
rcol2 = longtorgb(col2)
nsteps = 20

print 'Content-type: text/html\n'

# print static part 1
print '''
<html>
<title>
Blending colors
</title>
<body>
Here is a mix of the two colours you specified:
'''

# print blend fields
for i in range(nsteps+1):
fraction = float(i)/nsteps
mix = (int((1.0-fraction)*rcol1[0] + fraction*rcol2[0]),
int((1.0-fraction)*rcol1[1] + fraction*rcol2[1]),
int((1.0-fraction)*rcol1[2] + fraction*rcol2[2]))
print '''
<div style="width: 100px; height: 5px; background: rgb(%d,%d,%d)">
step %d
</div>
''' % (mix+(i,))

# print static part 2
print '''
</body>
</html>
'''

Mit freundlichen Gruessen,

Peter Maas

--
-------------------------------------------------------------------
Peter Maas,  M+R Infosysteme,  D-52070 Aachen,  Tel +49-241-93878-0
E-mail 'cGV0ZXIubWFhc0BtcGx1c3IuZGU=\n'.decode('base64')
-------------------------------------------------------------------

```