web-dev-qa-db-ja.com

Android-プレビューなしで写真を撮る

アプリケーションの実行が開始された直後にプレビューなしで写真を撮ろうとしています。その後、ルートフォルダーの新しいフォルダー「pictures123」に写真を保存します。誰かが私のコードの何が問題になっているのか教えてもらえますか?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    File directory = new File(Environment.getExternalStorageDirectory() + "/pictures123/");

    if (!directory.exists()) {
        directory.mkdir();
    }

    Camera camera = Camera.open(0);
    Camera.Parameters parameters = camera.getParameters();
    parameters.setPictureFormat(ImageFormat.JPEG);
    camera.setParameters(parameters);
    SurfaceView mview = new SurfaceView(getBaseContext());
    camera.setPreviewDisplay(mview.getHolder());
    camera.setPreviewDisplay(null);
    camera.startPreview();
    camera.takePicture(null,null,photoCallback);
    camera.stopPreview();
}

Camera.PictureCallback photoCallback=new Camera.PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera) {

        try {
            String root = Environment.getExternalStorageDirectory().toString();
            File myDir = new File(root + "/pictures123");
            File file = new File (myDir, "pic1.jpeg");
            FileOutputStream out = new FileOutputStream(file);
            out.write(data);
            out.flush();
            out.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();

        } catch (IOException e) {
            e.printStackTrace();

        } catch (Exception e)
        {
            e.printStackTrace();
        }
        finish();

    }
};

権限:

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission Android:name="Android.permission.CAMERA" />
<uses-feature Android:name="Android.hardware.camera" />
8
Eyal

プレビューなしで写真を撮ることはできませんが、画面にプレビューを表示する必要はありません。代わりに、出力をSurfaceTextureに送ることができます(API11以降)。

詳細については、 この回答 を参照してください。

8
fadden

Camera 2 APIを使用している場合、プレビューやランチデバイスのカメラアプリなしで密かに写真を撮るには、githubで私のプロジェクトを確認できます。

https://github.com/botyourbusiness/Android-camera2-secret-picture-taker

それが役に立ったことを願っています:)

1
hzitoun

主な問題は、startPreviewの直後にtakePictureを呼び出していることであり、実際にはセットアップの完了に時間がかかると思います。したがって、これら2つの間に遅延を追加すると、この問題を一時的に修正できます 詳細についてはこちらをご覧ください

0
ashoke

プレビューなしで写真を撮ることは不可能です。 Androidオンラインリファレンス: http://developer.Android.com/reference/Android/hardware/Camera.html#takePicture をお読みください。

注:このメソッドは、プレビューがアクティブな場合(startPreview()の後)にのみ有効です。画像が撮影された後、プレビューは停止されます。呼び出し元は、プレビューを再開したり、さらに写真を撮りたい場合は、startPreview()を再度呼び出す必要があります。これは、start()とstop()の間で呼び出さないでください。

0
yushulx