update:
/////////////////////////////////////////////////////////////////////////
main: ciclo i file che ho in una directory (che sono solo .png), converto il formato di PIL (PixelAccess) in Tuple con __convertPixels.codice:def main(self): os.chdir(self.__scanDir) while True: files = filter(os.path.isfile, os.listdir(self.__scanDir)) files = [os.path.join(self.__scanDir, f) for f in files] files.sort() for file in files: try: im = Image.open(file) self.__px = im.load() self.__width, self.__height = im.size[:2] self.__convertPixels() # [...] def __convertPixels(self): self.__pixels = tuple( tuple( tuple(self.__px[i,ii][:3]) for ii in xrange(self.__height) ) for i in xrange(self.__width) ) ## End def __convertPixels def __readTableInfo(self, left, top, right, bottom, toFind): info = self._simplePixelMatch( left = left, top = top, right = right, bottom = bottom, toFind = toFind ) if isinstance(info, list) and toFind == info: return "".join(str(l) for l in info) ## End def __readTableInfo def _simplePixelMatch(self, **kwargs): readed = [] for i in xrange(kwargs["left"], kwargs["right"]): for ii in xrange(kwargs["top"], kwargs["bottom"]): for k, char in enumerate(Table.chars): # Check if is outer of range of pixels if (ii + len(char)) > kwargs["bottom"]: continue c = 0 for pixels in char: if pixels != self.__pixels[i][ii + c]: break c += 1 if c == len(char): readed.append(k) if len(readed) == kwargs["toFind"]: return readed ## End def _hardPixelMatch
Con _simplePixelMatch ciclo i pixel in verticale confrontandola con delle mie tuple che contengono i medesimi pixel, esempio:
Immagine:
+-------+--------------+
| 0,0,0 | 255,255,255 |
| 255,0,0| 0,255,0 |
+-------+--------------+
Mia Tupla:
(0,0,0,),(255,0,0)
Se trova le tuple in "orizzontale" termina il ciclo e restituisce quello che deve restituire.
Ora il punto è: posso evitare il ciclo? Ma appunto fare in qualche modo una comparazione?

Rispondi quotando