質問を明確にした後に編集します。下の元の回答
あなたが処理している場所によって異なります。
SurfaceをSurfaceViewまたはTextureViewから割り当て(setSurface)に接続して、処理済み出力をその割り当てに書き込み、Allocation.ioSend()で送信することができます。 HDR Viewfinder demoはこのアプローチを使用します。
EGLシェーダベースの処理を行っている場合は、Surfaceをnative_window引数としてeglCreateWindowSurfaceでサーフェスをEGLSサーフェスに接続できます。その後、最終出力をそのEGLSurfaceにレンダリングすることができ、eglSwapBuffersを呼び出すと、バッファが画面に送られます。
ネイティブ処理を行っている場合は、NDK ANativeWindow methodsを使用して、Javaから渡したSurfaceに書き込み、convertからANativeWindowに渡すことができます。
Javaレベルの処理を行っているなら、それは本当に遅く、おそらく望んでいないでしょう。しかし、新しいAndroid M ImageWriterクラスを使用するか、フレームごとにEGLにテクスチャをアップロードすることができます。
あなたが言うように、すべてのフレームでImageViewに描画しますが、それは遅くなります。
オリジナルの答え:
あなたはJPEGの画像をキャプチャしている場合、あなたは、単にbyte[]
にImage.getPlanes()[0].getBuffer()
からのByteBufferの内容をコピーして、ビットマップに変換するBitmapFactory.decodeByteArray
を使用することができます。
YUV_420_888イメージをキャプチャする場合は、3平面YCbCr 4:2:0フォーマットから、RGB値のint []など、表示できるものに独自の変換コードを書き込む必要がありますからのビットマップ;残念ながら、これにはまだ便利なAPIはありません。
RAW_SENSOR画像(ベイヤーパターンの未処理センサーデータ)をキャプチャーする場合は、画像処理を大量に行うか、DNGを保存するだけです。
すべてのプレビューフレームでこれを実行しようとしていますか、しばらくして(このような高解像度の静止キャプチャなど)レートと解像度に応じて、異なる表示アプローチがより適切かもしれません。 –
実際にはすべてのフレーム。私は、画像処理による時間の損失のために表示することができないフレームがあることを知っています。YUVフォーマットは、プレビュー上のMI 30のFPSを与え、私ができる私は、画面上の20そのフレームを表示したい毎秒合計30の20個のフレームを処理することができる場合。 – rcmalli