IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

Enregistrer une image prise par une caméra dans ma mémoire interne de mon téléphone


Sujet :

API standards et tierces Android

  1. #1
    Membre régulier
    Développement
    Inscrit en
    Juillet 2012
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 20
    Points : 74
    Points
    74
    Par défaut Enregistrer une image prise par une caméra dans ma mémoire interne de mon téléphone
    Bonjour,
    Je me tourne enfin vers vous pour un souci qui me tracasse pendant des jours.
    Je voudrais récupérer une image prise par une camera sur un ImageView pour ensuite l'enregistrer à la racine de mon serveur wamp. A présent je parviens, au clique sur mon ImageView prendre une photo et l'afficher sur l'ImageView, mais depuis que j'ai voulu l'enregistrer sur la mémoire interne de mon téléphone, l'affiche sur l'ImageView ne marche plus.
    Encore plus loin, je voudrais récupérer cette image de la mémoire interne de mon téléphone pour l'enregistrer dans un de mes répertoires de mon serveur wamp. besoin de cout de main plaise voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
     
     
    		ImageView	imgrecto=(ImageView)findViewById(R.id.imageView1);
     
    		imgrecto.setOnClickListener(new View.OnClickListener() {
    		@Override
    		public void onClick(View img) {
    			try {
     
    			String path = Environment.getExternalStorageDirectory() + "/DCIM/Camera/photo1.png";
    			Uri uriSavedImage=Uri.fromFile(new File(path));	 
    			Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    			i.putExtra("return-data", true);
    			i.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 
    			startActivityForResult(i, 0);
    			} catch (Exception e) {
    				// TODO: handle exception
    				Toast.makeText(getApplicationContext(), "exp1 "+e.getMessage(), Toast.LENGTH_LONG).show();
    			}
     
     
    		}
    	});
     
    	}
    	public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     
         try{
    		ImageView	imgrecto=(ImageView)findViewById(R.id.imageView1);
    		if (resultCode == Activity.RESULT_OK) {
    			Bitmap bit = (Bitmap) data.getExtras().get("data");
    			imgrecto.setImageBitmap(bit);
    		}
    		else{
    			Toast.makeText(getApplicationContext(), "photo non prise", Toast.LENGTH_LONG).show();
    		}
         } catch (Exception e) {
    			// TODO: handle exception
        	 Log.e("log_tag", "exp 2" + e.getMessage()+" la cause"+ e.getCause());
    			Toast.makeText(getApplicationContext(), "exp2 "+e.getMessage(), Toast.LENGTH_LONG).show();
    		}

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Salut,

    As tu une erreur qui est apparu depuis les logs ?


    Pourrais nous montrer les logs pour savoir si tu n'as pas catché des exceptions.

    Est ce que seul le rajout de la sauvegarde d'image soit le click listener sur ta view est la seule modification ?

    Si tu l'enlève (en commentaires), est ce que cela remarche ?

    Merci.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    Membre régulier
    Développement
    Inscrit en
    Juillet 2012
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 20
    Points : 74
    Points
    74
    Par défaut
    Merci Feanorin pour votre réponse, oui une exception est générée (null) dans je pense cette exception est causée par cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
    qui enregistre l'image, mais qui retourne null à ImageView

  4. #4
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Ok

    Est ce que maintenant tu peux me montrer ton logcat ?

    Merci.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  5. #5
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Avant....

    Remplace la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.e("log_tag", "exp 2" + e.getMessage()+" la cause"+ e.getCause());
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.e("log_tag", "exp 2",e);
    Et tout deviendra clair.

    (d'ailleurs le tag est vraiment "log_tag" ?)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Membre régulier
    Développement
    Inscrit en
    Juillet 2012
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 20
    Points : 74
    Points
    74
    Par défaut
    Merci pour vos réponse, et voici le logcat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    10-31 03:42:58.337: E/log_tag(9228): exp 2java.lang.NullPointerException la causenull
    10-31 03:42:58.351: D/ActivityThread(9228): SEND_RESULT handled : 0 / ResultData{token=android.os.BinderProxy@417f02a0 results[ResultInfo{who=null, request=0, result=-1, data=null}]}
    10-31 03:42:58.360: D/ActivityThread(9228): ACT-AM_ON_RESUME_CALLED ActivityRecord{417f0a38 token=android.os.BinderProxy@417f02a0 {com.example.cameraimage/com.example.cameraimage.Activity_main}}
    10-31 03:42:58.360: D/ActivityThread(9228): ACT-RESUME_ACTIVITY handled : 0 / android.os.BinderProxy@417f02a0
    10-31 03:42:58.442: D/dalvikvm(9228): threadid=11: interp stack at 0x4d24e000
    10-31 03:42:58.562: W/IInputConnectionWrapper(9228): showStatusIcon on inactive InputConnection
    10-31 03:43:02.121: D/ActivityThread(9228): ACT-AM_ON_PAUSE_CALLED ActivityRecord{417f0a38 token=android.os.BinderProxy@417f02a0 {com.example.cameraimage/com.example.cameraimage.Activity_main}}
    10-31 03:43:02.157: D/ActivityThread(9228): ACT-PAUSE_ACTIVITY handled : 1 / android.os.BinderProxy@417f02a0
    10-31 03:43:02.225: D/OpenGLRenderer(9228): Flushing caches (mode 0)
    10-31 03:43:02.338: D/OpenGLRenderer(9228): Flushing caches (mode 1)
    10-31 03:43:02.741: D/ActivityThread(9228): ACT-STOP_ACTIVITY_HIDE handled : 0 / android.os.BinderProxy@417f02a0

  7. #7
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Alors tu as la réponse ici :
    exp 2java.lang.NullPointerException la causenull
    tu as un pointer null quelque part ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ImageView	imgrecto=(ImageView)findViewById(R.id.imageView1);
    		if (resultCode == Activity.RESULT_OK) {
    			Bitmap bit = (Bitmap) data.getExtras().get("data");
    			imgrecto.setImageBitmap(bit);
    Donc soit tes données reçu sont vides ou alors la récupération de ton image est mauvaise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImageView	imgrecto=(ImageView)findViewById(R.id.imageView1);
    Essaye de passer en DEBUG pour voir quelles données est mauvaise.

    Edit :
    Est ce que ce chemin "/DCIM/Camera/" existe sur ta sdcard ?

    Si il n'existe pas il faut que tu crées les dossiers avant de lancer la prise de l'image, l'application Camera ne te les créera pas.
    Pour cela il te faut aussi les permissions d'écriture de la SDCARD dans ton manifest.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  8. #8
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Fais ce que j'ai dit, et tu auras la trace complete de l'exception (et pas seulement son nom). Et par conséquent la ligne exacte ou tu fais appel à une référence nulle.

    (je pense que c'est le: getExtra().getXXXX'() : toujours dangereux si getExtra() n'est pas spécifié pour ne jamais renvoyer null)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  9. #9
    Membre régulier
    Développement
    Inscrit en
    Juillet 2012
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 20
    Points : 74
    Points
    74
    Par défaut
    c'est la donnée retournée "data" qui est nulle, quand ta mes répertoires, ils sont bien crées. nicroman j'ai fait effectivement c'est que tu m'as dit remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.e("log_tag", "exp 2" + e.getMessage()+" la cause"+ e.getCause());
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Log.e("log_tag", "exp 2",e+" la cause"+ e.getCause());
    et c'est ce qui ma donnée ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    10-31 03:42:58.337: E/log_tag(9228): exp 2java.lang.NullPointerException la causenull
    10-31 03:42:58.351: D/ActivityThread(9228): SEND_RESULT handled : 0 / ResultData{token=android.os.BinderProxy@417f02a0 results[ResultInfo{who=null, request=0, result=-1, data=null}]}
    10-31 03:42:58.360: D/ActivityThread(9228): ACT-AM_ON_RESUME_CALLED ActivityRecord{417f0a38 token=android.os.BinderProxy@417f02a0 {com.example.cameraimage/com.example.cameraimage.Activity_main}}
    10-31 03:42:58.360: D/ActivityThread(9228): ACT-RESUME_ACTIVITY handled : 0 / android.os.BinderProxy@417f02a0
    10-31 03:42:58.442: D/dalvikvm(9228): threadid=11: interp stack at 0x4d24e000
    10-31 03:42:58.562: W/IInputConnectionWrapper(9228): showStatusIcon on inactive InputConnection
    10-31 03:43:02.121: D/ActivityThread(9228): ACT-AM_ON_PAUSE_CALLED ActivityRecord{417f0a38 token=android.os.BinderProxy@417f02a0 {com.example.cameraimage/com.example.cameraimage.Activity_main}}
    10-31 03:43:02.157: D/ActivityThread(9228): ACT-PAUSE_ACTIVITY handled : 1 / android.os.BinderProxy@417f02a0
    10-31 03:43:02.225: D/OpenGLRenderer(9228): Flushing caches (mode 0)
    10-31 03:43:02.338: D/OpenGLRenderer(9228): Flushing caches (mode 1)
    10-31 03:43:02.741: D/ActivityThread(9228): ACT-STOP_ACTIVITY_HIDE handled : 0 / android.os.BinderProxy@417f02a0
    Merci

  10. #10
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Non c'est pas ce que j'ai dit

    J'ai dit de remplacer par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Log.e("log_tag", "exp 2",e);
    Paramètre 1: Le tag qui permet d'identifier un endroit "général" du code.
    Paramètre 2: Un message
    Paramètre 3: Une exception

    Et cela ne *peut pas* écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exp 2java.lang.NullPointerException la causenull
    dans le logcat !
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  11. #11
    Membre régulier
    Développement
    Inscrit en
    Juillet 2012
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 20
    Points : 74
    Points
    74
    Par défaut
    Bonjour à tous,
    je reviens très content(e) car j'ai trouvé solution à mon petit problème.
    je vais vous expliquer comment je suis parvenu(e) avec des lignes de codes.

    au clique sur mon ImageView prendre une photo et l'afficher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
     
     
    		ImageView	imgrecto=(ImageView)findViewById(R.id.imageView1);
    		imgrecto.setOnClickListener(new View.OnClickListener() {
    			@Override
    			public void onClick(View v) {
     
    		  Intent CameraIntent = new Intent(
    					android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    			startActivityForResult(CameraIntent, 2);
     
     
    		}
     
    		});
    		} 
     
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
    		if (requestCode == 2) {
    			if (resultCode == Activity.RESULT_OK) {
    				//TextView photorecto = (TextView) findViewById(R.id.textView2);
    				//photorecto.setText("  ");
    			    bit = (Bitmap) data.getExtras().get("data");
    				ImageView imgrecto=(ImageView)findViewById(R.id.imageView1);
    				imgrecto.setImageBitmap(bit);
     
    				new   Enregistrer_photo().execute();
    			}
     
    		}
    La classe Enregistre_image est utilisée pour transférer mon image vers mon serveur wamp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     public class VerifiNum extends AsyncTask <Void, Void, String> { 
     
    		// Bitmap bitmapOrg= BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getAbsolutePath() +"/DCIM/Camera/photo1.png"); 
    		@Override
    		protected String doInBackground(Void... arg0) {
    			// TODO Auto-generated method stub
     
    			ByteArrayOutputStream bao = new ByteArrayOutputStream();
    			bit.compress(Bitmap.CompressFormat.JPEG, 90, bao); 
    			  byte [] ba = bao.toByteArray(); 
    			  String ba1=Base64.encodeToString(ba, Base64.DEFAULT); 
    			  ArrayList nameValuePairs = new ArrayList();
    			  nameValuePairs.add(new BasicNameValuePair("image",ba1)); 
    			  try{ 
    			  HttpClient httpclient = new DefaultHttpClient();
                              //url de mon serveur wamp (adresse ip du serveur)
    			  HttpPost httppost = new HttpPost(url+"/fic_img.php"); 
    			  httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    			  HttpResponse response = httpclient.execute(httppost); 
    			  HttpEntity entity = response.getEntity();
    			   entity.getContent();
    		  		}catch(Exception e){
     
    		  		}
     
    			return null;
    		}
    	}
    }
    en fin le fichier fic_img.php pour uploder l'image dans un répertoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php  
    	$base = $_REQUEST['image'];
    	$filename = "bela.jpg";
    	$buffer=base64_decode($base);
    	$path = "img/".$filename.".jpg";
    	$handle = fopen($path, 'wb'); 
    	$numbytes = fwrite($handle, $buffer);
    	fclose($handle);  
    	?>
    Voilà, si cela peut aider d'autres.
    Je remercie nicroman et Feanorin qui m'ont apporté leurs précieuses contributions

  12. #12
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Merci pour le retour.
    Quelques remarques par contre : ne laisse pas de catch vide. C'est un bon moyen de se mettre une bombe et que ça saute plus tard sans savoir pourquoi.

    Comme l'a souligné Nicroman, fais en sorte qu'ils contiennent au minimum un
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
     Log.e("log_tag", "exp 2",e);

    Pour les codes de retour (ou code d'erreurs, ou tout ce qui est constante identificatrice partagée entre au moins 2 méthodes), je te suggère de créer une constante bien nommée pour ça.
    Par exemple, pour ton startActivityForResult, puis du onActivityResult correspondant.

    De plus, à la fin de ton AsyncTask, une petite notification utilisateur (un Toast par exemple) pourrait être bien. Pour notifier la réussite ou l'échec.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  13. #13
    Membre régulier
    Développement
    Inscrit en
    Juillet 2012
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 20
    Points : 74
    Points
    74
    Par défaut
    Merci Hizin pour vos remarques.
    j'ai pris soins de bien noter

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplacer une image fixe par une image animée (animation flash)
    Par MInfo25 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 17/03/2014, 20h11
  2. Réponses: 15
    Dernier message: 06/06/2013, 15h59
  3. Réponses: 1
    Dernier message: 14/05/2013, 21h29
  4. convertir une photo prise par la caméra (jpeg) en bmp
    Par androidisme dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 17/08/2010, 09h27
  5. Réponses: 0
    Dernier message: 24/09/2009, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo