2013-08-17 11 views
5

Je souhaite que mon application puisse capturer des photos sans utiliser d'autre application. Le code que j'ai utilisé:Comment capturer une photo de l'appareil photo sans intention

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    File photo = null; 
    try 
    { 
     photo = this.createTemporaryFile("picture", ".jpg"); 
     photo.delete(); 
    } 
    catch(Exception e) 
    { 
     Toast.makeText(getApplicationContext(),"Error",Toast.LENGTH_LONG).show(); 

    } 
    mImageUri = Uri.fromFile(photo); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); 
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

Mais ce code utilise l'application principale de la caméra. Quelqu'un peut-il me donner du code?

Répondre

4

Prendre une photo directement à l'aide de la classe Camera est incroyablement compliqué à obtenir.

Je travaille sur a library to simplify this, où vous ajoutez juste un CameraFragment à votre application pour l'interface utilisateur de prévisualisation de base, et appelez takePicture() sur elle pour prendre une photo, avec différentes manières de configurer le comportement (par exemple, où les images sont sauvés). Cependant, cette bibliothèque est encore un travail en cours.

Quelqu'un peut-il me donner du code?

"Un certain code" va durer des milliers de lignes (pour une implémentation complète, y compris le traitement de diverses bizarreries spécifiques aux périphériques).

Vous êtes invités à lire the Android developer documentation on the subject.

+0

J'ai une application qui utilise le mediarecorder pour enregistrer la vidéo et de son pas grand. N'y a-t-il pas quelque chose de similaire pour prendre des images? Ce que je veux, c'est obtenir une image et la superposer avec un autre bitmap pour créer un fichier. S'il vous plaît consulter ma question complète sur ce sujet: http: //stackoverflow.com/questions/18289544/taking-screenshot-programmatically-doesnt-capture -the-sommaire-de-surfaceview – mremremre1

+0

Et si j'ouvre la caméra avec camera = Camera.open(); et utilisez Camera.takePicture() comme vu sur la documentation? – mremremre1

+0

@ mremremre1: "J'ai une application qui utilise le mediarecorder pour enregistrer de la vidéo et ce n'est pas énorme" - alors je suppose que vous ne manipulez pas tous les appareils. Obtenir les aperçus corrects tout seul, pour portrait/paysage plus face à l'arrière/FFC, en prend beaucoup. "Que faire si j'ouvre la caméra avec camera = Camera.open(), et utilise Camera.takePicture() comme vu sur la documentation?" - C'est certainement le point de départ. – CommonsWare

1

une fois que vous avez l'ensemble de prévisualisation de la caméra, vous devez faire ce qui suit ...

protected static final int MEDIA_TYPE_IMAGE = 0; 

public void capture(View v) 
{ 
    PictureCallback pictureCB = new PictureCallback() { 
     public void onPictureTaken(byte[] data, Camera cam) { 
      File picFile = getOutputMediaFile(MEDIA_TYPE_IMAGE); 
      if (picFile == null) { 
      Log.e(TAG, "Couldn't create media file; check storage permissions?"); 
      return; 
      } 

      try { 
      FileOutputStream fos = new FileOutputStream(picFile); 
      fos.write(data); 
      fos.close(); 
      } catch (FileNotFoundException e) { 
      Log.e(TAG, "File not found: " + e.getMessage()); 
      e.getStackTrace(); 
      } catch (IOException e) { 
      Log.e(TAG, "I/O error writing file: " + e.getMessage()); 
      e.getStackTrace(); 
      } 
     } 
     }; 
     camera.takePicture(null, null, pictureCB); 
} 

Et la fonction getOutputMediaFile:

private File getOutputMediaFile(int type) 
{ 
     File dir = new File(Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_PICTURES), getPackageName()); 
     if (!dir.exists()) 
     { 
     if (!dir.mkdirs()) 
     { 
      Log.e(TAG, "Failed to create storage directory."); 
      return null; 
     } 
     } 
     String timeStamp = new SimpleDateFormat("yyyMMdd_HHmmss", Locale.UK).format(new Date()); 
     if (type == MEDIA_TYPE_IMAGE) 
     { 
     return new File(dir.getPath() + File.separator + "IMG_"+ timeStamp + ".jpg"); 
     } 
     else 
     { 
     return null; 
     } 
} 

Et vous avez terminé !!!

trouvé ce here

Questions connexes