Hello. I have been trying to use PIL's .putdata() method and I have
been having some problems. The error I get is:

Traceback (most recent call last):
  File "realautomata.py", line 72, in ?
    nim.putdata(y)
  File "C:\Python24\Lib\site-packages\PIL\Image.py", line 1120, in
putdata
    self.im.putdata(data, scale, offset)
TypeError: too many data entries

The code is:

import Image

# Contract:
# To simulate simple cellular automata.

class calculations:
    def __init__(self):
        self.against = self.array_maker_2()[110]
        print self.against
        self.check = self.array_maker_1()
        self.array = self.array_maker_3(31)
        self.calculator()

    def binary(self, n, size): ## This is the Int -> str(BINARY)
converter
        assert n >= 0
        bits = []
        while n:
            bits.append('01'[n&1])
            n >>= 1
        bits.reverse()
        result = ''.join(bits) or '0'
        for iteration in range(len(result),size):
            result = "0" + result
        return result

    def array_maker_1(self): # This makes the array that represents the
8 different permutations of 3 cells. Itself, its left and its right.
        return [self.binary(n, 3) for n in range(8)]

    def array_maker_2(self): # This makes the array that represents
every single different rule. If for instance the second element in one
    # of these rules is 1, then the corresponding permutation that may
be found in the result array (array_maker_3), will be 1 (black).
        return [self.binary(n, 8) for n in range(256)]

    def array_maker_3(self, y): # This is the array for all the
results. The automaton starts from the middle of the first row
        x = [["0" for x in range(2*y+1)] for n in range(y)]
        x[0][(2*y-1)/2] = "1"
        return x

    def calculator(self): # This cycles over all of the cells, and
scans one row at a time, and changes the next row according to the
current cell.
        self.buff_result = ["0","0","0"] # This is the current permutation
buffer to be checked against the corresponding arrays.
        for i in range(len(self.array)-1):
            for j in range(1, len(self.array[0])-1):
                self.step1(j,i)
                self.step2(j,i)
                self.step3(j,i)
                y = self.check.index(''.join(self.buff_result))
                self.array[i+1][j] = self.against[y]

# The steps update the result buffer.
    def step1(self, step, y):
        self.buff_result[0] = self.array[y][step-1]

    def step2(self, step, y):
        self.buff_result[1] = self.array[y][step]

    def step3(self, step, y):
        self.buff_result[2] = self.array[y][step+1]

objo = calculations()
x = objo.array
y = []
for num,zo in enumerate(x):
    for com,wo in enumerate(zo):
        x[num][com] = int(wo)

nim = Image.new("1", (62,31))

for n in x: #converting the array of arrays into a single array so
putdata can take it.
    for p in n:
        y.append(p)
print y
nim.putdata(y)

nim.resize((620,310)).save("output.png")

can someone tell me why I get the error?

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to