PictureCallback
Cf. gestion des caméras.
Cette classe est déclenchée juste après la prise d'une photo,
La méthode déclenchée est public void onPictureTaken(byte[] data, Camera camera)
Celle-ci recevant data qui est l'image prise (tableau de byte).
camera qui est l'instance de Camera d'où provient l'image.
Cette image sera encodée (jpg, raw ou postview) et l'encodage dépendra de la position de l'instance dans le paramétrage lors de l'appel à takePicture().
Vous pouvez donc préparer une instance PictureCallback pour traiter l'image raw (image brut provenant du capteur, donc sans correction ou passage de filtres)
PictureCallback rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
// TODO traiter l'image RAW.
}
};
ou pour traiter une image jpeg (donc compressée et forcement altérée, ce n'est pas la meilleur solution si vous envisagez de retravailler l'image, mais elle occupera moins de place que son équivalente raw)
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
// TODO traiter l'image JPEG.
}
};
data pourra
être null si problème de mémoire (mode raw est très
consommateur par exemple) ou encodage non supporté (comme postview).
Il sera donc à contrôler !
Voici un exemple minimaliste (il manque des contrôles) de code pour enregistrer un fichier au format jpeg sur le montage externe pouvant être la carte SD suivant le configuration de l'appareil:
Google préconise
l'utilisation de Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
pour déterminer le répertoire publique associé aux photos.
Cf. Environment (A partir de l'API 8).
Annexe
Vous pouvez aussi envisager d'enregistrer des informations exifs.
Cf. getJpegQuality () ou setJpegQuality () pour récupérer ou positionner la qualité de l'image JPEG (de 0 à 100, 100 pour très bonne qualité). Le setter étant à faire avant que la photo ne soit prise...
Cf. Orientation de la photo enregistrée.
Cf. Définir/connaître la taille et la qualité de la vignette.