Appareil photo Android Intention: comment obtenir la pleine taille de la photo?
Je suis en utilisant l'intention de lancer la caméra:
Intent cameraIntent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
getParent().startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
et à l'aide de:
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
photoImage.setImageBitmap(thumbnail);
photoImage.setVisibility(View.VISIBLE);
Mais c'est seulement une vignette, comment puis-je obtenir le plein bitmap? Je sais que je peux utiliser mon propre Activité et d'utilisation:
Camera.PictureCallback()
Mais est-il de toute façon à le faire en utilisant l'Intention?
Merci!
edit:
J'ai aussi essayé:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Uri uri = data.getData();
imageView.setImageURI(uri);
}
Il travaille pour la photo sélectionnée à partir de la galerie, mais pour l'appareil-photo de l'intention, de données.getData() renvoie la valeur null.
Vous devez vous connecter pour publier un commentaire.
Pour obtenir la taille d'image de la caméra, vous devriez point de la caméra pour enregistrer l'image dans le fichier temporaire, comme:
Puis, après la capture d'image de l'intention fini de travailler - il suffit de saisir votre photo à partir de
imageUri
à l'aide de code suivant:P. S. Code doivent être révisées à l'égard des nouvelles de restriction de sécurité appliquées dans Android M - FileProvider:
mImageUri
doit être emballé avecFileProvider
intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
voir developer.android.com/reference/android/provider/... pour l'insaisissable de la documentation sur ce comportement.Toast.makeText(activity, "Please check SD card!...
. Toast ne pas prendre msecs paramètre, mais plutôt un indicateur LENGTH_LONG ou LENGTH_SHORT. En outre, l' ".show()" à la fin est oublié. Rien de très important mais juste pour le garder propre.onActivityResult()
lorsque l'activité de la ferme. Dans ce cas particulier, certains prédéfinisint
qui doivent être>0
FileProvider
travail. La config de détails pourFileProvider
dans les docs sont dépourvues & ce post rempli les blancs qui ont travaillé le 1er essai. Vous devez vérifier siBuild.VERSION.SDK_INT > M
lors de l'utilisation deFileProvider.getUriForFile(...)
autrement devez continuer à utiliserUri.fromFile(...)
Environment.getExternalStorageDirectory()+"/.temp/"
Ouvrir l'Appareil photo et enregistrer l'image dans certaines répertoire spécifique
Manipuler L'Image
Même si c'est une vieille question et il a accepté de répondre,
Je voudrais partager ma solution.
Dans ce cas, vous n'avez pas à créer un fichier temporaire.
En outre, nous la création d'un sélecteur qui offre à l'utilisateur la fois: prendre une photo avec l'appareil photo ou de choisir un existant à partir d'une galerie.
et ici nous avons la récupération des résultats:
J'ai aussi utilisé la réponse de Vicky, mais j'ai dû enregistrer l'uri d'un bundle pour éviter la perte de ce changement d'orientation. Donc, si vous ne pas obtenir un résultat de votre intention après l'inclinaison de l'appareil, il se peut que votre uri n'a pas survécu au changement d'orientation.
Activité code de Résultat:
enregistrer l'uri du bundle:
le récupérer à partir de votre enregistré bundle lors de la créer:
Pour capturer le maximum de la taille de l'image de la caméra, j'espère que ces simples étapes sera très utile
Ici, la pris en charge taille de chaque mobile est pris, à partir de ce qui est la taille maximale est résolu que la taille de l'image à capturer.
Ne pas utiliser
onActivityResult
's de données. Il m'a fallu de nombreuses heures pour tester différentes solutions. Un appareil photo enregistre une photo (même si vous ne définissez pas les autorisations pour l'appareil-photo et la lecture de la carte dans AndroidManifest), mais alorsonActivityResult
retournedata == null
etMediaStore
retourne sur le mauvais chemin. À ces solutions, vous obtenez tout simplement la dernière image de la galerie, et non votre photo.