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

Android Discussion :

Problème avec l'API camera


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Par défaut Problème avec l'API camera
    Bonjour,
    J'ai quelque souci avec l'API camera de Android.
    Pour commencer je ne sais pas comment faire pour que MediaStore.Images.Media.SIZE WIDTH et HEIGHT se mette automatiquement, ce qui fait que je suis obligé de mettre des valeurs qui ne sont pas bonnes.
    De plus je voudrais avoir la possibilité de modifier le nom de la photo car lorsque elle s'enregistre elle a un un nom qui n'a aucun sens, et je voudrais pouvoir la traiter derrière.
    Voici mon code lorsque l'on appuie sur le bouton pour prendre une photo :

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
        private void SavePicture() {
            try {
                SimpleDateFormat timeStampFormat = new SimpleDateFormat(
                        "yyyy-MM-dd-HH.mm.ss");
                String fileName = "photo_" + timeStampFormat.format(new Date())
                        + ".jpg";
     
                // Metadata pour la photo
                ContentValues values = new ContentValues();
                values.put(MediaStore.Images.Media.TITLE, fileName);
                values.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);
                values.put(MediaStore.Images.Media.DESCRIPTION, "Description.");
                values.put(MediaStore.Images.Media.DATE_TAKEN, new Date().getTime());
                values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
                values.put(MediaStore.Images.Media.SIZE, "1048576");
                values.put(MediaStore.Images.Media.WIDTH, "1920");
                values.put(MediaStore.Images.Media.HEIGHT, "1080");
     
                // Support de stockage
                Uri taken = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                        values);
     
                // Ouverture du flux pour la sauvegarde
                stream = (FileOutputStream) getContentResolver().openOutputStream(
                        taken);
     
                mCamera.takePicture(null, pictureCallback, pictureCallback);
            } catch (Exception e) {
                // TODO: handle exception
            }
     
        }
        // Callback pour la prise de photo
        Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {
     
            public void onPictureTaken(byte[] data, Camera camera) {
                if (data != null) {
                    // Enregistrement de votre image
                    try {
                        if (stream != null) {
                            stream.write(data);
                            stream.flush();
                            stream.close();
                        }
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
     
                    // Nous redémarrons la prévisualisation
                    camera.startPreview();
                }
            }
        };
    Merci à ceux ou celles qui prendront le temps de m'aider.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Par défaut
    Personne ne peut m'aider ?

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Dans une activité où je prends une photo avec géolocalisation, j'ai ce morceau de 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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    		btnClic = (ImageButton) findViewById(R.id.Clic);
    		surfaceCamera = (SurfaceView) findViewById(R.id.SurfaceCamera);
    		btnClic.setOnClickListener(new View.OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				if (camera != null) {
    					MediaPlayer.create(getApplicationContext(), R.raw.click_apn).start();
    					SavePicture();
    				}
    			}
    		});
    		surfaceCamera.getHolder().addCallback(this); // Attache les retours du holder à l'activité
    	}
     
    	public void surfaceCreated(SurfaceHolder holder) { // Prend le contrôle de la caméra
    		if (camera == null)
    			camera = Camera.open();
    	}
     
    	public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    		if (isPreview) { // Si le mode preview est lancé alors on l'arrête
    			camera.stopPreview();
    		}
    		parameters = camera.getParameters(); // Récupére les paramètres de la caméra
    		parameters.setPreviewSize(width, height); // Change la taille
    		camera.setParameters(parameters); // Applique les nouveaux paramètres
    		try { // Attache la prévisualisation de la caméra au holder de la surface
    			camera.setPreviewDisplay(surfaceCamera.getHolder());
    		} catch (IOException e) {
    		}
    		camera.startPreview(); // Lançe la previsualisation
    		isPreview = true;
    	}
     
    	public void surfaceDestroyed(SurfaceHolder holder) { // Arrête la caméra et rend la main
    		if (camera != null) {
    			camera.stopPreview();
    			isPreview = false;
    			camera.release();
    		}
    	}
     
    	@Override
    	public void onResume() { // Retour sur l'application
    		super.onResume();
    		camera = Camera.open();
    	}
     
    	@Override
    	public void onPause() { //Mise en pause de l'application
    		super.onPause();
    		if (camera != null) {
    			camera.release();
    			camera = null;
    		}
    		sensorManager.unregisterListener(this);
    	}
     
    	private void SavePicture() {
    		try { // Metadata pour la photo
    			parameters.setGpsAltitude(altImg);
    			parameters.setGpsLatitude(latImg);
    			parameters.setGpsLongitude(lonImg);
    			parameters.getHorizontalViewAngle();
    			parameters.setGpsProcessingMethod(String.format("Cap de prise de vue %.0f °", capCor));
    			camera.setParameters(parameters); // Applique les nouveaux paramètres
    			ContentValues values = new ContentValues();
    			values.put(Media.TITLE, String.format("Cap de prise de vue : %.0f °", capCor));
    			values.put(Media.DISPLAY_NAME, nomImg);
    			values.put(Media.DESCRIPTION, "Image géoréférencée");
    			values.put(Media.DATE_TAKEN, new Date().getTime());
    			values.put(Media.LATITUDE, latImg);
    			values.put(Media.LONGITUDE, lonImg);
    			values.put(Media.MIME_TYPE, "image/jpeg");
    //			Uri taken = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values); // Support de stockage
    //            FileOutputStream stream = (FileOutputStream) getContentResolver().openOutputStream(taken);
    			camera.takePicture(null, pictureCallback, pictureCallback); // Ouverture du flux pour la sauvegarde
    		} catch (Exception e) {
    		}
    	}
     
     
    	private Camera.PictureCallback pictureCallback = new Camera.PictureCallback() { //Callback pour la prise de photo
    		public void onPictureTaken(byte[] data, Camera camera) {
    			if (data != null) { // Enregistrement de l'image
    				try {
    					FileOutputStream fOut = new FileOutputStream(repImg + "/" + nomImg + String.format("_Cap%03.0f", capCor) + ".jpg");
    					fOut.write(data);
    					fOut.flush();
    					fOut.close();
    				} catch (Exception e) {
    				}
    				camera.startPreview(); // Redémarre la prévisualisation
    			}
    		}
    	};
    Si cela peut vous aider.

    Cordialement.

    Pierre

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Par défaut
    Je vais regarder ça et je te dit mais ça m'a l'air d'être ce que je voulais merci en tout cas

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Par défaut
    Bien après vérification, cela fonctionne. Cependant je ne comprend pas pourquoi je suis obliger de redémarrer mon appareil pour voir les photos en galerie ou dans le répertoire Picture, je pense à un problème de déchargement mais je ne vois pas du tout quoi faire.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Par défaut
    Bon j'ai fini par trouver le problème.
    il fallait ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(picture));
                        sendBroadcast(intent);
    Après stream.close();
    dans picturecallback

    Merci à ceux qui mon aidé.

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

Discussions similaires

  1. [Flex3] Problème avec l'API de Logging du framework Flex 3
    Par gobgob dans le forum Flex
    Réponses: 1
    Dernier message: 26/10/2010, 10h35
  2. problème avec l'api FileDialog
    Par gnaoui_9999 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 20/07/2010, 15h40
  3. Problème avec l'API Quartz
    Par reeda dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 16/09/2008, 12h20
  4. Problème avec l'API "GetDlgItemText"
    Par olaf_le_preux dans le forum Windows
    Réponses: 11
    Dernier message: 18/01/2008, 10h20
  5. Problème avec les API
    Par Bertr@nd dans le forum Windows Forms
    Réponses: 20
    Dernier message: 14/07/2007, 14h53

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