Android - prendre une photo sans prévisualisation

j'essaie de prendre une photo sans prévisualisation, immédiatement lorsque mon application commence à tourner et ensuite de sauvegarder l'image dans un nouveau dossier - "pictures123", dans le dossier racine. Quelqu'un pourrait-il me dire ce qui ne va pas dans mon code?

@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();

    }
};

autorisations:

<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
demandé sur Eyal 2014-09-10 02:34:19

3 réponses

Vous ne pouvez pas prendre une photo sans un aperçu, mais vous n'avez pas à afficher l'aperçu sur l'écran. Vous pouvez à la place diriger la sortie vers une sortie SurfaceTexture (API 11+).

Voir cette réponse pour plus de détails.

8
répondu fadden 2017-05-23 12:17:23

je pense que le problème principal est que vous appelez takePicture immédiatement après startPreview qui prend réellement le temps de compléter sa configuration. Ainsi, l'ajout d'un délai entre les deux pourrait temporairement corriger cette question, regardez ici pour plus de détails .

0
répondu ashoke 2017-05-23 12:00:21

impossible de prendre une photo sans prévisualisation. Vous devriez lire L'Android en ligne référence: http://developer.android.com/reference/android/hardware/Camera.html#takePicture .

Note: Cette méthode n'est valide que lorsque preview est actif (après startPreview()). L'aperçu sera arrêté après la prise de vue; les appelants doivent appeler startPreview() de nouveau s'ils veulent redémarrer l'aperçu ou prendre plus de photos. Cela ne devrait pas être appelé entre start() et stop().

0
répondu yushulx 2014-09-10 02:09:44