2009-05-03 22 views
1

Meine App liest Frames von Video (mit Pyglet), extrahiert einen "Streifen" (dh Region - volle Breite von 1 bis 6 Videozeilen), fügt dann jeden Streifen (hängt es) in ein Bild, das später ausgeschrieben werden kann * .png Datei.HowTo Region Pyglet Bild in PIL Image?

Problem ist Pyglet GL Bilder werden im Grafikspeicher gespeichert, sind also sehr begrenzt re Größe. Meine aktuelle Klunker-Problemumgehung besteht darin, das zu erstellende png-Bild als kleine Kacheln zu erstellen (dh innerhalb der Pyglet GL-Größenbeschränkung), wenn die Kachel voll ist, schreibe es in eine * png-Datei, lies das als PIL-Bild zurück Datei, fügen Sie dann das Kachelbild in die endgültige PIL Image * PNG-Datei ein/anfügen Sie es an.

Ich denke, dass es möglich sein sollte, den pyglet-GL-Streifen in ein PIL-Bild-freundliches Format zu konvertieren und direkt in das endgültige PIL-Bild einzufügen und damit das Fliesengeschäft überflüssig zu machen und hat Auswirkungen auf die Leistung.

Aber ich kann nicht finden, wie man die Streifendaten in ein Formular erhält, das ich in ein PIL Bild einfügen kann. Habe viele Anfragen gesehen, die umgekehrt sind, aber ich bin nie mit der Herde gelaufen.

Antwort

2

Ich weiß, dass es schlechte Form ist auf die eigene Frage zu beantworten, aber ich arbeitete eine Antwort aus, die für andere nützlich sein kann, so ist es hier ...

nextframe = source.get_next_video_frame() # bekommt zuerst Video-Frame
während nextframe = None: # gibt keine EOF

# 
### extract strip data, conver to PIL Image-friendly form, paste itn into travo Image 
# 
strip = nextframe.get_region(0, (vid_frame_h//2)-(strip_h//2), strip_w, strip_h) # Extract strip from this frame 
strip_image_data = strip.get_image_data() 
strip_data = strip_image_data.get_data(strip_image_data.format, strip_image_data.pitch) 
strip_Image = Image.frombuffer("RGB", (strip_w, strip_h), strip_data) 
travo_image.paste(strip_Image, (0, travo_filled_to, strip_w, travo_filled_to + strip_h)) # paste strip image into travo_image 
travo_filled_to = travo_filled_to + strip_h  # update travo_filled pointer 
nextframe = source.get_next_video_frame()  # get next video frame (EOF returns None)  

Ende "während nextframe = None:"

Verwandte Themen