#!/usr/bin/env python import vcs,os version = '1.0' general_description = """ Reads in and converts Ferret (spk) colormap file to vcs colormap If method is set to 'blend': colors will be set using the ferret % value, and blending will be used in between 0% in ferret corresponds to index_start 100% in ferret corresponds to index_end If method is set to 'contiguous': colors will be set starting at index_start and assigned in order as found in the ferret (spk) file, no blending between colors """ def spk2vcs(file,cname=None,x=None,index_start=16,index_end=239,method='blend',verbose=False): """ %s Usage: cmap, ncolors = spk2vcs(file,cname=None,x=None) Input: file : Ferret (spk) colormap file cname : VCS output colormap name, if None, uses ferret file name x : vcs canvas, if None then a vcs canvas instance will be created index_start : 0%% of ferret %% index, default is 16 index_end : 100%% of ferret %% index, defalut is 239 method : 'blend' or 'adjacent', defalut is 'blend' Output: cmap : vcs colormap object, with conitguous color set from index_Start if method='contiguous' or spread from index_start to index_end if method is 'blend' """ f=open(file) ln=f.readlines() # Treat colormap name if cname is None: cname = '.'.join(os.path.split(op.file)[-1].split('.')[:-1]) if verbose: print 'Colormap name:',cname if x is None: x=vcs.init() cmap=x.createcolormap(cname) x.setcolormap(cmap.name) ncolors = 0 last_index = index_start if verbose: print 'Method:',method for l in ln: sp=l.split() if len(sp)!=4: # Is it a line with 4 values (p,r,g,b)? continue p,r,g,b=sp try: # Are the 4 values float? p=float(p) r=float(r) g=float(g) b=float(b) except: continue if method == 'contiguous': x.setcolorcell(index_start + ncolors, int(r), int(g), int(b)) if verbose: print 'Setting cell %s to: %s, %s, %s' % (index_start + ncolors, int(r), int(g), int(b)) cmap=x.getcolormap(cmap.name) ncolors+=1 else: index = index_start + int(p*(index_end-index_start)/100.) x.setcolorcell( index, int(r), int(g), int(b)) cmap=x.getcolormap(cmap.name) if verbose: print 'Setting cell %s to: %s, %s, %s' % (index, int(r), int(g), int(b)) dr = cmap.index[index][0] - cmap.index[last_index][0] dg = cmap.index[index][1] - cmap.index[last_index][1] db = cmap.index[index][2] - cmap.index[last_index][2] for indx in range(last_index+1,index): p = float(indx-last_index)/float(index-last_index) r = cmap.index[last_index][0]+int(p*dr) g = cmap.index[last_index][1]+int(p*dg) b = cmap.index[last_index][2]+int(p*db) x.setcolorcell(indx , r, g, b) if verbose: print '\t Sub-setting cell %s to: %s, %s, %s' % (indx , r, g, b) cmap=x.getcolormap(cmap.name) last_index = index return cmap setattr(spk2vcs,'__doc__',spk2vcs.__doc__ % general_description) if __name__=='__main__': import optparse op=optparse.OptionParser(usage="%%prog [options]\n%s" % general_description,version="%%prog %s" % version) op.add_option("--file",dest='file',help="Ferret (spk) colormap file to convert, [default: %default]",default="pal1.spk") op.add_option("--name",dest="name",help="Name of the returned vcs colormap, [default: uses ferret (spk) file name]",default='default') op.add_option("--out",dest="out",help="Name of the returned vcs script file, [default: file.scr]",default='default') op.add_option("--index_start",dest="index_start",type='int',help='start index for mapping of ferret colors into vcs colormap, [default: %default]',default=16) op.add_option("--index_end",dest="index_end",type='int',help='end index for mapping of ferret colors into vcs colormap, [default: %default]',default=239) op.add_option("--method",dest="method",help='method for mapping of ferret colors into vcs colormap (blend or contiguous), [default: %default]',default='blend') op.add_option("--blend",dest="blend",action='store_true',help='end index for mapping of ferret colors into vcs colormap, overrides --method option',default=True) op.add_option("--contiguous",dest="blend",action='store_false',help='end index for mapping of ferret colors into vcs colormap, overrides --method option',default=True) op.add_option("--verbose",dest="verbose",action='store_true',help='Enable verbose screen output while converting colorcells, [default: %default]',default=False) op,args = op.parse_args() if op.method in [ 'contiguous','blend']: method = op.method else: op.error("options method can ONLY be either blend or contiguous") if op.blend is True: method = 'blend' else: method = 'contiguous' if op.name == 'default': cname = None cmap = spk2vcs(op.file,index_start=op.index_start,index_end=op.index_end,method=method,cname=cname,verbose=op.verbose) if op.out == 'default': oname = '.'.join(os.path.split(op.file)[-1].split('.')[:-1])+'.scr' cmap.script(oname) print 'Done, colormap converted to VCS using "%s" method from index %s to index %s\nStored in file: %s' % (method,op.index_start,op.index_end,oname)