Forum: PC-Programmierung Python Problem: Laufzeitfehler


von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich bin hier an einer Routine zum Offscreen-Drawing für eine 
LED-Matrixanzeige am Verzweifeln. Ohne dass ich eine Idee hätte, warum, 
steigt das Programm immer an der gekennzeichneten Stelle mit der Meldung 
aus: 'int' object not iterable.

Bin kurz davor, aus dem Fenster zu springen ... hat jemand einen Tip? 
Danke.

def SetImage(img,mx):
   (w,h) = img.size
   pix = img.load()
   offscreenCanvas = mx.CreateFrameCanvas()
   for x in range(w):
      for y in range(h):
         (r, g, b) = pix[x,y] <========================
         offscreenCanvas.SetPixel(x,y,r,g,b)
   sleep(0.015)
   offscreenCanvas = mx.SwapOnVSync(offscreenCanvas)

: Bearbeitet durch User
von Tom K. (ez81)


Lesenswert?

Was sagt type(pix[x,y]) ? Das scheint ein einfaches int zu sein.
1
>>> a = 23
2
>>> (x,y,z) = a
3
Traceback (most recent call last):
4
  File "<stdin>", line 1, in <module>
5
TypeError: 'int' object is not iterable

von sebastian (Gast)


Lesenswert?

Ich nehme mal an, es ist ok, pix mit einem Tupel zu indizieren (pix wird 
bestimmt nicht der Integer sein, um den es in der Fehlermeldung geht). 
D.h. die Fehlermeldung kommt daher, dass du pix[x,y] in (r,g,b) 
auspacken willst. Wenn pix[x,y] eine Zahl ist, dann liegt die Vermutung 
nahe, dass es r<<16|g<<8|b ist, evtl. auch noch mit einem Alpha-Wert. 
Reihenfolge evtl. auch anders. Details müssten in der Dokumentation zu 
deiner Library (die du nicht genannt hast) stehen.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?


von Yalu X. (yalu) (Moderator)


Lesenswert?

Das geladene Bild ist kein RGB- sondern ein Graustufenbild oder eins mit 
indizierten Farben (Farbpalette). Für diese Bilder hat jedes Pixel nur 
einen einzelnen Zahlenwert, der auch als solcher in PIL auftaucht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.