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 header
     print 'Content-type: text/html\n'

     # print static part 1
     print '''
         <html>
         <head>
         <title>
         Blending colors
         </title>
         </head>
         <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')
-------------------------------------------------------------------



More information about the Python-list mailing list