# immbase.py import aus,re # Immagine a valori di grigio. class immbase: def __call__ (A,j,k,car=0,M=None): fjk=A.f(j,k) if not (car or M): return fjk if car: return chr(int(fjk*255)) return int(fjk*M) def __init__ (A,colonne=None,righe=None,f=None): A.colonne=colonne; A.righe=righe; A.f=f def isto (A,n=100,M=None): # M=None corrisponde al caso continuo. conto={} if M==None: for h in xrange(n): conto[h]=0 for j in xrange(A.colonne): for k in xrange(A.righe): x=A(j,k) if x<1: h=int(n*x) else: h=n-1 conto[h]+=1 else: for h in xrange(M+1): conto[h]=0 for j in xrange(A.righe): for k in xrange(A.colonne): conto[A(j,k,M=M)]+=1 return conto def leggibyte (A,nome): testo=aus.leggifile(nome).lstrip() u=re.compile('\s'); lv=u.split(testo,4); stringavalori=lv[4] m=A.colonne=int(lv[1]); n=A.righe=int(lv[2]) A.f=lambda j,k: ord(stringavalori[m*k+j])/255.0 def leggipgm (A,nome): testo='# '+aus.leggifile(nome).strip(); testo=aus.eliminacommenti(testo) valori=map(int,testo.split()) m=A.colonne=valori[0]; n=A.righe=valori[1]; M=float(valori[2]) A.f=lambda j,k: valori[3+m*k+j]/M def scrivipgm (A,nome,M=255): preambolo='P2\n# %s\n%d %d\n%d\n' %(nome,A.colonne,A.righe,M); a=[] for k in xrange(A.righe): for j in xrange(A.colonne): a.append('%d' %(A(j,k,M=M))) aus.scrivifile(nome,preambolo+' '.join(a)) def scrivibyte (A,nome): preambolo='P5\n%d %d\n255\n' %(A.colonne,A.righe); a=[] for k in xrange(A.righe): for j in xrange(A.colonne): a.append(A(j,k,car=1)) aus.scrivifile(nome,preambolo+''.join(a))