web-dev-qa-db-ja.com

TextureViewからビットマップを効率的に取得する

TextureViewから各フレームを取得しようとしていますが、残念ながら次のことを試みています。

textureView.getBitmap();

パフォーマンスが低下する結果、ビットマップを取得するためのより高速な方法があります。代わりにNDKを使用する方が良いですか?

実際の例を探しています

12
AndyRoid

TextureViewは、SurfaceTextureでフレームを受信します。これにより、Surfaceに送信されたフレームが取得され、GLESテクスチャに変換されます。ピクセルデータを取得するには、テクスチャをフレームバッファにレンダリングしてから、glReadPixels()で読み取る必要があります。次に、ピクセルデータをビットマップオブジェクトでラップできます(ピクセルデータのコピーが含まれる場合と含まれない場合があります)。

迅速に実行する必要のあるすべてのコードはすでにネイティブに実装されているため、NDKを使用してもあまり効果はありません。

データをSurfaceTextureに直接送信し、GLESを自分で実行することで、ある程度の改善が見られる場合がありますが、おそらく、入力フレームをTextureViewに表示したいので、節約できる可能性があるのはビットマップのオーバーヘッドだけです(重要である)。

フレームがどこから来ているのか、そしてフレームで何をしたいのかを質問で説明すると役立つかもしれません。

4
fadden