2009-05-03 5 views
1

Мое приложение считывает кадры с видео (используя пиглет), извлекает «полоску» (то есть область - полную ширину на 1 до 6 линий видео), затем вставляет каждую полосу (добавляет ее) в изображение, которое впоследствии может быть выписано * .png файл.Как поставить область изображения Пиглета в изображение PIL?

Проблема: изображения Pyglet GL хранятся в графической памяти, поэтому они очень ограничены. Мое текущее временное решение klunky создает текущее изображение png в виде небольших фрагментов (т. Е. В пределе размера листка пиглета), когда плитка заполнена, напишите ее в файл * png, прочитайте это как изображение PIL файл, затем вставьте/добавьте изображение плитки в окончательный файл PIL Image * png.

Я считаю, что нужно перевести кубик pyglet-GL в формат PIL, совместимый с изображениями, и вставить/добавить его прямо в конечное изображение PIL, что не требует необходимости в работе с плиткой, что значительно усложняет ситуацию и имеет влияние на производительность.

Но я не могу найти, как получить данные полосы в форму, которую я могу вставить в изображение PIL. Увидели много запросов, переходящих в другую сторону, но я никогда не бегал с стадом.

ответ

2

Я знаю, что это плохая форма, чтобы ответить на свой собственный вопрос, но я выработал ответ, который может быть полезным для других, так вот она ...

nextframe = source.get_next_video_frame() # получить первую видеокадр
пока nextframe = None: # возвращает None в 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)  

конец "а nextframe = None:"