2010-11-11 6 views
3
i = 0 
for x in range(0, 5): 
    for y in range(0, 5): 
     if 0 == outputAfterLearning[i]: 
      image.putpixel((x, y), (0, 0, 0)) 
     elif 1 == outputAfterLearning[i]: 
      image.putpixel((x, y), (255, 255, 255)) 
     i += 1 

for x in range(0, 5): 
    for y in range(5, 10): 
     if 0 == outputAfterLearning[i]: 
      image.putpixel((x, y), (0, 0, 0)) 
     elif 1 == outputAfterLearning[i]: 
      image.putpixel((x, y), (255, 255, 255)) 
     i += 1 

for x in range(5, 10): 
    for y in range(0, 5): 
     if 0 == outputAfterLearning[i]: 
      image.putpixel((x, y), (0, 0, 0)) 
     elif 1 == outputAfterLearning[i]: 
      image.putpixel((x, y), (255, 255, 255)) 
     i += 1 

for x in range(5, 10): 
    for y in range(5, 10): 
     if 0 == outputAfterLearning[i]: 
      image.putpixel((x, y), (0, 0, 0)) 
     elif 1 == outputAfterLearning[i]: 
      image.putpixel((x, y), (255, 255, 255)) 
     i += 1 

Comme vous pouvez le voir, je suis en train d'itérer sur une image en utilisant des carrés 5x5px et en y plaçant des pixels. Le code ci-dessus est obviosuly pour l'image avec des dimensions 10x10px mais je voudrais écrire le code ci-dessus d'une manière plus générale afin que je puisse l'utiliser pour des images plus grandes (par exemple 30x30px) sans ajouter 32 nouvelles boucles.Comment écrire ceci plus simplement

+0

pointe pro: l'utilisation xrange() au lieu de la plage(), il produit un itérateur au lieu de la liste entière. Puisque vous n'utilisez pas réellement la liste [0, 1, 2, 3, 4, 5], plutôt seulement les valeurs 1, 2, 3, 4, 5. – NorthIsUp

Répondre

4
xdim, ydim = 10, 10 
xblocksize, yblocksize = 5, 5 
for xblock in range(0, xdim, xblocksize): 
    for yblock in range(0, ydim, yblocksize): 
     for x in range(xblock, xblock+xblocksize): 
     for y in range(yblock, yblock+yblocksize): 
      # the common code. 

Mais je voudrais créer un générateur pour l'itération de bloc:

def blocked(xdim, ydim, xblocksize, yblocksize): 
    for xblock in range(0, xdim, xblocksize): 
    for yblock in range(0, ydim, yblocksize): 
     for x in range(xblock, xblock+xblocksize): 
      for y in range(yblock, yblock+yblocksize): 
       yield (x, y) 

et utiliser putpixel comme

color = [(0,0,0),(255,255,255)] 
for colorcode, pixelloc in zip(outputAfterLearning, blocked(10, 10, 5, 5)): 
    if 0 <= colorcode < len(color): 
    #^omit this if outputAfterLearning[i] is always valid 
    image.putpixel(pixelloc, color[colorcode]) 
+0

Je ferais également le code commun dans une fonction avec params des dims et des tailles de sorte qu'il puisse être utilisé encore et encore avec différentes tailles/dims images – Jordan

+0

Merci beaucoup. –

Questions connexes