root / PyOpenGLDemo / dek / MandelImage.py @ 1
History  View  Annotate  Download (1.9 kB)
1 
#!/usr/bin/python


2  
3 
# This is statement is required by the build system to query build info

4 
if __name__ == '__build__': 
5 
raise Exception 
6  
7 
## This isn't really a PyOpenGL demo, but it's a nice

8 
## example of how Numeric, Tkinter, and PIL can be used

9 
## together to create all sorts of images.

10 
## In this case, it's the Mandelbrot set.

11 
## i used the Numerical python text example, but modified it to

12 
## work with PIL

13  
14 
try:

15 
import numpy as Numeric 
16 
except ImportError, err: 
17 
try:

18 
import Numeric 
19 
except ImportError, err: 
20 
print "This demo requires the numpy or Numeric extension, sorry" 
21 
import sys 
22 
sys.exit() 
23 
import FFT 
24 
import Tkinter 
25 
import Image 
26 
import ImageTk 
27 
import sys 
28  
29 
w = 256

30 
h = 256

31  
32 
class Test: 
33 
def draw(self,LowX, HighX, LowY, HighY, maxiter=30): 
34 
xx=Numeric.arange(LowX,HighX,(HighXLowX)/w*2)

35 
yy=Numeric.arange(HighY,LowY,(LowYHighY)/h*2)*1j 
36 
c=Numeric.ravel(xx+yy[:,Numeric.NewAxis]) 
37 
z=Numeric.zeros(c.shape,Numeric.Complex) 
38 
output=Numeric.resize(Numeric.array(0,),c.shape)

39  
40 
for iter in range(maxiter): 
41 
print "iter",iter 
42 
z=z*z+c 
43 
finished=Numeric.greater(abs(z),2.0) 
44 
c=Numeric.where(finished,0+0j,c) 
45 
z=Numeric.where(finished,0+0j,z) 
46 
output=Numeric.where(finished,iter,output)

47  
48 
## scale output a bit to make it brighter

49 
## output * output * 1000

50 
output = (output + (256*output) + (256**2)*output)*8 
51 
self.mandel = output.tostring()#"raw", "RGBX", 0, 1) 
52 
print len(self.mandel) 
53  
54 
def createImage(self): 
55 
self.im = Image.new("RGB", (w/2,h/2)) 
56 
self.draw(2.1, 0.7, 1.2, 1.2) 
57 
print len(self.im.tostring("raw", "RGBX", 0, 1)) 
58 
self.im.fromstring(self.mandel, "raw", "RGBX", 0, 1) 
59  
60 
def createLabel(self): 
61 
self.image = ImageTk.PhotoImage(self.im) 
62 
self.label = Tkinter.Label(self.root, image=self.image) 
63 
self.label.pack()

64 

65 

66 
def __init__(self): 
67 
self.root = Tkinter.Tk()

68 
self.i = 0 
69 
self.createImage()

70 
self.createLabel()

71 
self.root.mainloop()

72  
73 
demo = Test 
74  
75 
if __name__ == '__main__': 
76 
demo() 
77 