def __getitem__(self, *args): """return slice as a string.""" if IS_PY3: return array.__getitem__(self, *args).tostring().decode("ascii") else: return array.__getitem__(self, *args).tostring()
class Image(array): def __new__(cls, w, h, typecode='d', data=None): self = array.__new__(cls, typecode) return self def __init__(self, w, h, typecode='d', data=None): self.width = w self.height = h if data is None: self.append(0) self *= w*h elif isinstance(data, file): self.fromfile(data, w * h) else: self.extend(data) def new(self, width=None, height=None, typecode=None): if width is None: width = self.width if height is None: height = self.height if typecode is None: typecode = self.typecode return Image(width, height, typecode) def clone(self): return Image(self.width, self.height, self.typecode, self) def _idx(self, x, y): if 0 <= x < self.width and 0 <= y < self.height: return y*self.width + x raise IndexError def __getitem__(self, (x, y)): return array.__getitem__(self, self._idx(x, y))
def __getitem__(self, i): assert len(self) == 256 return array.__getitem__(self, i & 255)
def __getitem__(self, i): if i < 0 or i >= len(self): return 0 return array.__getitem__(self, i) # ID: get
def __getitem__(self, i): return array.__getitem__(self, 0)
def __getitem__(self, i): assert len(self) == 65536 return array.__getitem__(self, i & 65535)
class ZeroPaddedImage(Image): def __getitem__(self, (x, y)): try: return array.__getitem__(self, self._idx(x, y)) except IndexError: return 0