Seite 2 von 2
Re: ByteArray to IntegerList
Verfasst: Montag 14. April 2014, 21:28
von Pf@nne
Hi,
das Ausgeben des image_files klappt prima.....
nur habe ich gerade erst festgestellt, dass die Pixel in einem BMP Zeilenweise von Ende nach Anfang abgelegt sind.
Gibt es eine "einfache" Möglichkeit die Daten zeilenweise rückwärts aus dem File zu lesen
und dabei noch "leere" Füllbytes auszufiltern?
So ganz nebenbei müssen dann auch noch die Farbtiefe reduziert werden (24bpp --> 16bpp).
Ich würde es hinbekommen alles Byteweise "zusammenzufriemeln", so wie ich euch und Python aber einschätze gibt es da aber bestimmt wieder einen Dreizeiler......
Danke für eure Mühe....
Pf@nne
Re: ByteArray to IntegerList
Verfasst: Dienstag 15. April 2014, 08:54
von BlackJack
@Pf@nne: Ich würde schauen ob eine Bibliothek helfen könnte beim einlesen und konvertieren. Pygame oder PIL zum Lesen. Pygame müsste man auch zum Konvertieren verwenden können. Wenn man es tatsächlich beides selber schreiben will, dann mindestens `numpy` zum Konvertieren, denn das wirklich in reinem Python-Code zu machen, könnte sich mit dem Ziel es schnell zu machen nicht so gut vertragen.
Vollkommen ungetestet:
Code: Alles auswählen
#!/usr/bin/env python
import pygame
def load_image_data(filename):
return pygame.image.load(filename).convert(16).get_buffer().raw
def main():
pygame.init()
try:
image_data = load_image_data('test.bmp')
block_length = 0xfff
blocks = (
image_data[i:i + block_length]
for i in xrange(0, len(image_data), block_length)
)
for block in blocks:
print map(ord, block)
finally:
pygame.quit()
Re: ByteArray to IntegerList
Verfasst: Dienstag 15. April 2014, 20:15
von Pf@nne
Wahnsinn.......
eine Variable direkt mit einer Schleife füllen.......
Wie verträgt sich das mit klassischen Programiersprachen, ich komme eher aus der Pascal-Ecke.....
ich hab da mal mit Turbo Pascal angefangen......
Solche kunstrukte sind schon klasse.....
Woher weiß man, dass block ein Element von blocks ist?
Läuft soweit auch ganz prima, nur sind die beiden FarbBytes im File andersherum abgelegt,
daher müsten immer zwei Bytes beim Einlesen vertauscht werden......
Ich wage garnicht zu fragen, aber hast du da auch einen "vierzeiler" parat.....
Wie gesagt, ich hab es prinzipiell am Laufen, jedoch bearbeite ich jedes Byte einzeln in Schleifen.....
Ist nicht besonders effektiv.....
http://youtu.be/2buraOvTse0
Gruß
Pf@nne
Re: ByteArray to IntegerList
Verfasst: Dienstag 15. April 2014, 20:25
von fail
Wahnsinn.......
eine Variable direkt mit einer Schleife füllen.......
Wenn dich das interessiert schau hier :
https://docs.python.org/2/tutorial/data ... rehensions
Ich hab mich so sehr an an List Comprehension gewohnt, ich würde nicht mehr zu einer Sprache wechseln die sie nicht beherscht( oder zumindest map,filter...).
Woher weiß man, dass block ein Element von blocks ist?
Das definiert man ja so. block definiert man als die Variable die nacheinander die Elemente von blocks annimmt.
Re: ByteArray to IntegerList
Verfasst: Dienstag 15. April 2014, 20:45
von Pf@nne
Das definiert man ja so. block definiert man als die Variable die nacheinander die Elemente von blocks annimmt.
Ja, jetzt sehe ich es auch......
Einfach Sachen benutzen ohne vorher bescheid zu sagen, was man nicht alles machen kann......
Re: ByteArray to IntegerList
Verfasst: Dienstag 15. April 2014, 20:51
von BlackJack
Und nochmal völlig ungetestet:
Code: Alles auswählen
from array import array
# ...
def load_image_data(filename):
result = array('h')
result.fromstring(pygame.image.load(filename).convert(16).get_buffer().raw)
result.byteswap()
return result.tostring()
Re: ByteArray to IntegerList
Verfasst: Dienstag 15. April 2014, 21:11
von Pf@nne
Und nochmal.....Wahnsinn....
vielen Dank........
http://youtu.be/Tt7ayONIW18
Bist du zufällig auch am Raspberry Pi aktiv...??
Re: ByteArray to IntegerList
Verfasst: Dienstag 15. April 2014, 21:40
von EyDu
fail hat geschrieben:Wenn dich das interessiert schau hier :
https://docs.python.org/2/tutorial/data ... rehensions
Ich hab mich so sehr an an List Comprehension gewohnt, ich würde nicht mehr zu einer Sprache wechseln die sie nicht beherscht( oder zumindest map,filter...).
In diesem Fall ist es ein Generator-Ausdruck. Ein kleiner aber manchmal wichtiger Unterschied.
Re: ByteArray to IntegerList
Verfasst: Dienstag 15. April 2014, 22:06
von BlackJack
@Pf@nne: Kommt auf die Definition von aktiv an. Ich habe einen mit XBMC als „Fernseher” und kleinen Server laufen, und einen als Internetradiowecker und zum spielen/basteln. Wobei ich letzteres nun schon eine Weile nicht mehr gemacht habe.
Re: ByteArray to IntegerList
Verfasst: Mittwoch 16. April 2014, 06:05
von Pf@nne
Moin BlackJack,
ich treibe den ganzen Displayaufwand um es letztendlich als Anzeigegerät für den Raspberry zu nutzen.
Viele TFT-Controller werden von der fbtft-Library schon unterstützt, der RA8875 den ich nutze leider noch nicht.
Den RA8875 habe ich ganz gut unter Kontrolle, jetzt geht es darum den Framebuffer des Raspberry an Python zu übergeben und zur Anzeige zu bringen.......
Hast du Lust hier "ein wenig" anzuschieben......
Gruß
Pf@nne
Re: ByteArray to IntegerList
Verfasst: Mittwoch 16. April 2014, 08:55
von BlackJack
@Pf@nne: Wäre es da nicht sinnvoller die fbtft-Bibliothek zu erweitern als etwas in Python zu schreiben?
Re: ByteArray to IntegerList
Verfasst: Mittwoch 16. April 2014, 13:22
von Pf@nne
Wäre es da nicht sinnvoller die fbtft-Bibliothek zu erweitern als etwas in Python zu schreiben?
Auf jeden Fall, die steht komplett zur Verfügung.
Ich hatte jetzt ertmal Python genutzt um die Grundfunktionen des RA8875 zu erkunden.....
Ich hatte in die fbtft schon mal reingeschaut, leider hat sich mir das ganze nicht erschlossen.
Kennst du die fbtft?
https://github.com/notro/fbtft/wiki
Gruß
Pf@nne
Re: ByteArray to IntegerList
Verfasst: Donnerstag 24. April 2014, 20:49
von Pf@nne
Hi,
ich hab beim Testen mit fbtft "am System gefummelt" nun geht der schöne Code nicht mehr:
Code: Alles auswählen
import spidev
import time
import random
import struct
import os
from functools import partial
import pygame
from array import array
from PIL import Image
...
...
def load_image_data(filename):
result = array('h')
result.fromstring(pygame.image.load(filename).convert(16).get_buffer().raw)
result.byteswap()
return result.tostring()
def Show_Pic(x1,y1,FileName):
Pic = Image.open(FileName)
biWidth, biHeight = Pic.size
BufferSize = biWidth*biHeight*2
x2 = x1 + biWidth -1
y2 = y1 + biHeight
ActiveWindow(x1,y1,x2,y2)
Set_MemoryWrite_Cursor(x1,y1)
pygame.init()
try:
image_data = load_image_data(FileName)
block_length = 0xfff
blocks = (
image_data[i:i + block_length]
for i in xrange(0, len(image_data), block_length)
)
WriteCMD(0x02)
GPIO.output(8, False)
spi.writebytes([0x00]) #WriteData Byte
for block in blocks:
spi.writebytes(map(ord, block))
GPIO.output(8, True)
finally:
pygame.quit()
Als Fehlermeldung erhalte ich:
Code: Alles auswählen
Traceback (most recent call last):
File "RA8875.py", line 308, in <module>
Show_Pic(0,0,"hintern_24.bmp")
File "RA8875.py", line 270, in Show_Pic
image_data = load_image_data(FileName)
File "RA8875.py", line 253, in load_image_data
result.fromstring(pygame.image.load(filename).convert(16).get_buffer().raw)
pygame.error: cannot convert without pygame.display initialized
Hat jemand eine Idee was ich da vergessen habe....??
Gruß
pf@nne
Re: ByteArray to IntegerList
Verfasst: Donnerstag 24. April 2014, 20:54
von BlackJack
@Pf@nne: `pygame.init()` muss ausgeführt werden bevor man etwas anderes von Pygame benutzt.
Re: ByteArray to IntegerList
Verfasst: Donnerstag 24. April 2014, 21:11
von Pf@nne
Aber wo wird denn Pygame vorher genutzt?
Das fängt doch erst nach dem try: an.....?
Gruß
Pf@nne
Re: ByteArray to IntegerList
Verfasst: Donnerstag 24. April 2014, 21:28
von BlackJack
@Pf@nne: Dann hat das `init()` aus irgendwelchen Gründen nicht funktioniert. Lass Dir mal den Rückgabewert davon ausgeben.
Re: ByteArray to IntegerList
Verfasst: Donnerstag 24. April 2014, 21:42
von Pf@nne
Code: Alles auswählen
Set_MemoryWrite_Cursor(x1,y1)
print "pygame.init() =", pygame.init()
try:
pygame.init() = (5, 1)
Re: ByteArray to IntegerList
Verfasst: Donnerstag 24. April 2014, 21:56
von BlackJack
@Pf@nne: Dann scheint 1 von 6 Subsystemen nicht initialisiert werden zu können. Kann es sein, dass kein X-Server läuft und der bei vorherigen Tests lief?
Re: ByteArray to IntegerList
Verfasst: Donnerstag 24. April 2014, 22:17
von Pf@nne
Für meine fbtft-tests musste ich das fbtft-image verwenden,
startx meldet
server error
no screens found