5

Android カメラにアクセスし、フレーム (画像) を取得し、それを処理してからプロセスを再開するアプリケーションを作成しようとしています。

これを行うには、 を呼び出してフレームを取得camera.setOneShotPreviewCallback(...)し、コールバックで受信したデータを処理してから、setOneShotPreviewCallback再度呼び出します。

setOneShotPreviewCallback問題は、メインアクティビティのonResume()関数を入れてプロセスを開始できないことです。それを行うと、コールバックは呼び出されません。

次のテスト コードを参照してください。

public void onResume() {
    super.onResume();
    camera = getCameraInstance();

    cameraPreviewSurface = new CameraPreview(this, camera);
    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
    preview.removeAllViews();
    preview.addView(cameraPreviewSurface);
    camera.setOneShotPreviewCallback(cameraPreviewCallback);

    Button button = (Button) findViewById(R.id.button_capture);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            camera.setOneShotPreviewCallback(cameraPreviewCallback);
        }
    });
}

アプリケーションの起動時にコールバックが呼び出されることはありませんが、ボタンが押されるとすぐにコールバックが返されます。

の後にクラスsetOneShotPreviewCallback内で使用しようとしましたが、それでもメソッドが呼び出されませんでした。CameraPreviewcamera.startPreview();

4

1 に答える 1

4

問題が見つかりました。何らかの理由で、プレビュー サーフェスが初期化された後にコールバックを設定する必要があります。

私の場合、カスタム SurfaceView を使用していたので 、 関数surfaceCreatedsurfaceChanged関数の両方でコールバックを適用する必要がありました。

camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
camera.setOneShotPreviewCallback(cameraPreviewCallback);
于 2013-04-15T11:07:45.137 に答える