2010-12-03 9 views
2

私はonPreviewFrameからフレームを取得した顔検出アプリケーションを構築し、顔検出を行い、次にサーフェイスビューのキャンバスに円を描画します。問題は、Camera.StartPreview()が開始されたときにサーフェスビュースレッドを使用してフレームが自動的に表示されることです。これは、プレビューコールバックがキックインするためには明らかに必要です。処理、顔の検出と描画が別のスレッドで行われているので(ここでは想定しています)、表示されているフレームとそのフレームの結果の間に2秒の遅延がありますキャンバスで処理され描画されます。Camera.Previewなしで処理した後、Camera.PreviewCallbackからフレームを手動で表示する方法

私がしたいことは、フレームを表示しているカメラのプレビューを止め、処理後に自分自身を表示することです。私はこれに3つの利点があると信じています:

消えると遅れます。

キャンバス上ではなく、ビットマップに直接描画することができます。これは、行ったことを元に戻すことができないため役に立たないものです。

これは、同じイメージを使用する2つのスレッドを持たないことで、メモリの消費を抑えるのに役立ちます。

私は、プレビューコールバックからフレームを表示することは可能ですが、どのようにして自動的に表示されているフレームをどのように停止するかを知っていますか?

事前に感謝します。

答えて

1

Jamesここでは、カメラのプレビューを止めたい場合は、牽制線をコメントアウトしてください(私はCameraPreview.javaを最初に使用したとします)。 // Camera.setPreviewDisplay(holder); // setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); これは、カメラがプレビューを表示するためにサーフェスを使用しないため、コールバックデータを使用して直接表示できますが、効率は非常に低く、エミュレータでは1fpsしかありませんが、その後、あなたがより効率的に次の

幸運をフレームを描画する方法を検討することができ、私はそれがこのソリューション:)

+1

ありがとう後にあなたのためにOKだかどうかを知りたい、これはプレビューが表示されて停止しません。私はビットマップを表示する方法を検討する必要があります。現在、surfaceViewは明らかにレイアウト上にあります。テストのためにビットマップをキャンバスに描画しますが、すべてのプレビューコールバックに対してこれを試すと遅延があります約3秒である。再びこれは助けに感謝しています。 –

関連する問題