1

私のアプリはビデオからフレームを読み取り (pyglet を使用)、「ストリップ」(つまり、領域 - 1 ~ 6 ビデオ ラインの全幅) を抽出し、各ストリップを画像に貼り付け (追加)、後で * を書き出すことができます。 png ファイル。

問題は、Pyglet GL 画像がグラフィックス メモリに保存されるため、サイズ変更が非常に制限されていることです。私の現在の厄介な回避策は、将来のpng画像を小さなタイルとして(つまり、pyglet GLサイズ制限内で)構築し、タイルがいっぱいになったら、* pngファイルに書き出し、それをPIL画像ファイルとして読み戻すことです、次に、タイル イメージを最終的な PIL Image * png ファイルに貼り付け/追加します。

pyglet-GL ストリップを PIL 画像に適した形式に変換し、それを最終的な PIL 画像に直接貼り付け/追加することが可能であるべきだと思います。これにより、物事が非常に複雑になり、パフォーマンスに影響を与えるタイル ビジネスが不要になります。 .

しかし、ストリップ データを PIL イメージに貼り付けることができる形式にする方法が見つかりません。多くのリクエストが他の方法で変換されているのを見てきましたが、群​​れで実行したことはありません.

4

1 に答える 1

2

自分の質問に返信するのは悪い形だとわかっていますが、他の人に役立つかもしれない回答を考え出したので、ここに...

nextframe = source.get_next_video_frame() # nextframe
中に最初のビデオ フレームを取得 != None:# EOF で None を返す

#
### 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)    

「while nextframe != None:」の終わり

于 2009-05-04T18:21:26.930 に答える