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 :

Enregistrer et visualiser une image d'une preview


Sujet :

Android

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Par défaut Enregistrer et visualiser une image d'une preview
    Bonjour,

    Voila j'ai un soucis : je tente d'enregistrer une image provenant de la preview de la camera, grace à la fonction callback onpreviewframe(). Mais j'ai une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.UnsupportedOperationException: Unknown URI: content://media/external/images/media
    Pourtant, j'ai recopié le code d'un bouquin concernant l'enregistrement d'une image. Le voici :
    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
    camera.setPreviewCallback(new PreviewCallback() {
            public void onPreviewFrame(byte[] _data, Camera _camera) {
     
             if(nbImages == 15)
             {
              ContentValues values = new ContentValues();
              values.put(Media.TITLE, uuidUse + "_" + (++nbImages));
              values.put(Media.DESCRIPTION, "Image prise par le telephone");
              Uri uri = getContentResolver().insert(
                    Images.Media.EXTERNAL_CONTENT_URI, values);
              OutputStream os;
              try {
               os = getContentResolver().openOutputStream(uri);
               os.write(_data);
               os.flush();
               os.close();
              } catch (FileNotFoundException e) {
               Log.e(getClass().getSimpleName(),
                     "Fichier non trouvé à l'ecriture de l'image", e);
              } catch (IOException e) {
               Log.e(getClass().getSimpleName(),
                     "Erreur E/S à l'enregistrement de l'image", e);
              }
             }
             else
             {
              ++nbImages;  
             }
            }
       });
    Avec ceci, la preview se lance puis provoque une erreur qui ferme la preview lorsque nbimages = 15.

    Je précise que j'ai bien rajouté la permission

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    Voila, si vous avez une idée je suis preneur

    Merci.

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Bonjour

    Apparemment, cela vient du chemin (uri). Regarde sur ton mobile si ce chemin existe pour commencer!

    Il est possible que ce chemin existe seulement si tu as une carte SD (à confirmer)! Dans ce cas, il te faudra un test ou il faudra changer l'uri!

    Peut on avoir la ligne exacte de l'erreur?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Par défaut
    Merci David pour ta réponse,

    Alors en fait, je teste sur mon Nexus S qui ne possede pas de SDCard (il n'a que 16 Go en memoire interne) et le soucis est que j'ai essayé de tester avec Images.Media.INTERNAL_CONTENT_URI mais cela provoque aussi une erreur...

    Bizzarement, j'ai remarqué aussi que un fichier s'enregistrait bien (une nouvelle entrée apparait bien dans mon album) mais on ne peut pas l'ouvrir ...

    Pour ce qui est de la ligne, je pourrai te la confirmer ce soir Mais je suppose que c'est à l’écriture non ?

    Regarde sur ton mobile si ce chemin existe pour commencer!
    Tu as une idée de comment faire la chose ? (je ne connais vrt pas bien ma bécane )

    Merci

  4. #4
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Citation Envoyé par benthebest Voir le message

    Pour ce qui est de la ligne, je pourrai te la confirmer ce soir Mais je suppose que c'est à l’écriture non ?
    Je suppose aussi mais sais ton jamais

    Citation Envoyé par benthebest Voir le message
    Tu as une idée de comment faire la chose ? (je ne connais vrt pas bien ma bécane )

    Merci
    Bien sure, normalement, tu as une icone "fichier" sur ton mobile. Une fois que tu as cliqué dessus, tu cherches le chemin:
    /media/external/images/media
    Si il existe, euh ... je n'ai pas d'explication ca serait étrange!
    Sinon, ton erreur est logique, il essaye d'écrire dans un endroit qui n'existe pas. Ce chemin représente normalement la sd card et vu que tu en as pas ...!

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Par défaut
    Bien sure, normalement, tu as une icone "fichier" sur ton mobile. Une fois que tu as cliqué dessus, tu cherches le chemin:
    Euh, je ne trouve pas d’icône fichier

  6. #6
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Citation Envoyé par benthebest Voir le message
    Euh, je ne trouve pas d’icône fichier
    Il doit y avoir une autre icone alors! Du coup, branche le à ton ordinateur et tu verras l'arborescence!

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Par défaut
    Ok Merci tout d abord pr ton aide.

    Je viens aux nouvelles

    Alors là ça plante plus, je n'ai plus d'erreurs, ça crée bien un fichier jpeg mais le soucis est que, je n'arrive pas à l'ouvrir !

    Je crois qu'il est incomplet parce que quand j'essaie de l'ouvrir sous photoshop ça me dit "Impossible d'ouvrir le fichier F:\DCIM\Camera\1234545345345.jpg" car le segment de marqueur JPEG est trop court (le fichier est peut-être incomplet ou tronqué)".

    Pourtant je fais bien un fclose à la fin de l’écriture ...

    Une idée ?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Par défaut
    Personne pour m'aider ??

    Bon, j'ai essayé une autre technique d'enregistrement :

    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
     
          FileOutputStream os = null;
          try {
           //ICI ca ecrit mais la picture ne s'ouvre pas !!!
           os = new FileOutputStream(String.format("/sdcard/toto_%d.jpg", System.currentTimeMillis()));
           os.write(_data);
           os.flush();
           os.close();
          } catch (FileNotFoundException e) {
           Log.e(getClass().getSimpleName(),
             "Fichier non trouvé à l'ecriture de l'image", e);
          } catch (IOException e) {
           Log.e(getClass().getSimpleName(),
             "Erreur E/S à l'enregistrement de l'image", e);
          }
    Mais comme précisé ds le code, je ne comprends pas pourquoi je n'arrive pas à ouvrir le fichier, pourtant bien créé sur ma mémoire, et qui est sensé être une image ...

    Je suis sûre que ça ne doit pas être grand chose mais quoi ... Please Help me !!


  9. #9
    Expert confirmé

    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
    Par défaut
    Bonjour,

    Est ce que les données dans _data correspondent aux format JPEG ?

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Par défaut
    Merci de ton aide.

    Euh, _data est envoyé en paramètre de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void onPreviewFrame(byte[] _data, Camera _camera)
    Apparemment, il s'agit d'un tableau de byte représentant l'image brute ... (cf le premier poste).

  11. #11
    Expert confirmé

    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
    Par défaut
    Oui il faut que tu regardes le format de ces données , il me semble de mémoire que l'on peut le précisez avant de lancer la caméra.

    Sinon l'enregistrement ne marchera pas !

    the contents of the preview frame in the format defined by ImageFormat, which can be queried with getPreviewFormat(). If setPreviewFormat(int) is never called, the default will be the YCbCr_420_SP (NV21) format.
    Donc fait un setPreviewFormat avant de récupérer ton image

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Par défaut
    Merci pour ta réponse.

    alors j'ai bien ajouté mais malheureusement, ça ne change rien ...

    Voici le code de ma fonction surfacechanged :
    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
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
    			int height) {
    		if (camera != null) {
    			camera.stopPreview();
    			Camera.Parameters p = this.camera.getParameters();
     
    			List<Camera.Size> previewSizes = p.getSupportedPreviewSizes();
     
     
    			Camera.Size previewSize = previewSizes.get(0);
    			p.setPreviewSize(previewSize.width, previewSize.height);
     
    			//pr ke les données dans _data correspondent aux format JPEG
    			p.setPreviewFormat(PixelFormat.JPEG);
     
    			camera.setParameters(p);
     
    			// la camera est tjrs vertical
    			ProjectTestAndroidActivity.setCameraDisplayOrientation(this,
    					CAMERA_ID_SELECTED, camera);
     
    			camera.setPreviewCallback(new PreviewCallback() {
    				int nbImages = 0;
    				public void onPreviewFrame(byte[] _data, Camera _camera) {
     
    					if(nbImages == 15)
    					{
    						//OutputStream os;
    						FileOutputStream os = null;
    						try {			
    							//ICI ca ecrit mais la picture ne s'ouvre pas !!!
    							os = new FileOutputStream(String.format("/sdcard/toto_%d.jpg", System.currentTimeMillis()));
    							os.write(_data);
    							os.flush();
    							os.close();
    						} catch (FileNotFoundException e) {
    							Log.e(getClass().getSimpleName(),
    									"Fichier non trouvé à l'ecriture de l'image", e);
    						} catch (IOException e) {
    							Log.e(getClass().getSimpleName(),
    									"Erreur E/S à l'enregistrement de l'image", e);
    						}	
    					}
    					++nbImages;			
    				}
     
    			});
     
    			try {
    				this.camera.setPreviewDisplay(holder);
     
    				this.camera.startPreview();
     
    			} catch (IOException e) {
    				Log.e(LOG_TAG_VIDEO_PREVIEW,
    						"Erreur E/S lors du setPreviewDisplay sur l'objet Camera",
    						e);
    			}
    		}
    	}
    Une autre idée ?

    encore merci.

  13. #13
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Bonjour,

    Regardes ce tuto!

    Il utilise la même chose que toi (cf. méthode onPictureTaken).

    Regardes si tu as bien toutes les permissions dans ton manifest sinon compares tes fonctions et regardes ce qui ne va pas

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Par défaut
    Ok c'est super cool, je réussit a enregistrer, merci !!

    Now, j'ai encore un petit soucis

    En fait, lorsque je vais voir ses photos enregistrées (ds le dossier PATH_APP, en connectant mon phone en usb), celles-ci sont penchées à 90° alors que la preview elle, affiche correctement l'image (vertical, et à l'endroit) ...

    voici le 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
    camera.setPreviewCallback(new PreviewCallback() {
    				int nbImages = 0;
    				public void onPreviewFrame(byte[] _data, Camera _camera) {
     
    					if(nbImages <= 55)
    					{
    						try {
    							Camera.Parameters parameters = _camera.getParameters();
    							Size size = parameters.getPreviewSize();
    							YuvImage image = new YuvImage(_data, parameters.getPreviewFormat(),size.width, size.height, null);
    							File file = new File(String.format(PATH_APP + "sod_%d.jpg", System.currentTimeMillis()));
    							FileOutputStream os = new FileOutputStream(file);
    							image.compressToJpeg(new Rect(0, 0, image.getWidth(), image.getHeight()), 90, os);
    							//os.write(_data);
    							//os.flush();
    							os.close();
     
    						} catch (FileNotFoundException e) {
    							Log.e(getClass().getSimpleName(),
    									"Fichier non trouvé à l'ecriture de l'image", e);
    						} catch (IOException e) {
    							Log.e(getClass().getSimpleName(),
    									"Erreur E/S à l'enregistrement de l'image", e);
    						}	
    					}
     
    					++nbImages;			
    				}
    			});
    cela ne viendrai t-il pas de mon instanciation de la classe Rect qui déconne quelque part ?

    encore merci

  15. #15
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 17
    Par défaut
    Je sais pas si ça peux t'aider, mais j'avais fais une activité qui pouvait récup une image, une video, ou un son et pouvoir partager le résultat via un "createChooser".

    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    public class ShareActivity extends Activity implements OnClickListener,
    		android.view.View.OnClickListener {
     
    	private static final String AUDIO_TMP_FILE = Environment
    			.getExternalStorageDirectory()
    			+ File.separator
    			+ "audio_restaumobil.ogg";
    	private static final int REQUEST_TAKE_SOUND = 1;
    	private static final int REQUEST_TAKE_VIDEO = 2;
    	private static final int REQUEST_TAKE_PICTURE = 3;
    	private Intent mIntent;
    	private TextView mTextAddMultimedia;
    	private ImageView mImageAddMultimedia;
    	private Button mBtnShare;
    	private EditText mTextComment;
     
    	@SuppressWarnings("unchecked")
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
     
    		setTitle(getTitleText());
    		setContentView(getContentView());
     
    		mTextAddMultimedia = (TextView) findViewById(R.id.text_share_add_multimedia);
    		mImageAddMultimedia = (ImageView) findViewById(R.id.btn_share_add_multimedia);
    		mBtnShare = (Button) findViewById(R.id.btn_share);
    		mTextComment = (EditText) findViewById(R.id.text_comment);
     
    		mTextAddMultimedia.setOnClickListener(this);
    		mImageAddMultimedia.setOnClickListener(this);
    		mBtnShare.setOnClickListener(this);
     
    		final List<Object> data = (List<Object>) getLastNonConfigurationInstance();
     
    		if (data == null) {
    			mIntent = new Intent();
    			mIntent.setAction(Intent.ACTION_SEND);
    			mIntent.setType("text/*");
    			mImageAddMultimedia.setImageResource(getDefaultImage());
    		} else {
    			mIntent = (Intent) data.get(0);
    			mTextComment.setText((String) data.get(0));
    			updateStates();
    		}
    	}
     
    	protected String getTitleText() {
    		return getString(R.string.recommend) + " "
    				+ getString(R.string.name_restaurant);
    	}
     
    	protected int getDefaultImage() {
    		return R.drawable.share;
    	}
     
    	protected int getContentView() {
    		return R.layout.share;
    	}
     
    	@Override
    	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    		super.onActivityResult(requestCode, resultCode, data);
    		boolean typeSet = false;
     
    		if (requestCode == REQUEST_TAKE_SOUND
    				&& resultCode == Activity.RESULT_OK) {
    			mIntent.setType("audio/*");
    			typeSet = true;
     
    		} else if (requestCode == REQUEST_TAKE_PICTURE
    				&& resultCode == Activity.RESULT_OK) {
    			mIntent.setType("image/*");
    			typeSet = true;
     
    		} else if (requestCode == REQUEST_TAKE_VIDEO
    				&& resultCode == Activity.RESULT_OK) {
    			mIntent.setType("video/*");
    			typeSet = true;
    		}
     
    		if (typeSet) {
    			mIntent.putExtra(Intent.EXTRA_STREAM, data.getData());
    			updateStates();
    		}
    	}
     
    	protected void setSharedImage(Bitmap image) {
    		mIntent.setType("image/*");
    		String path = Images.Media.insertImage(getContentResolver(), image,
    				"temp_restaumobil", null);
     
    		mIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(path));
    		mTextAddMultimedia.setText(R.string.text_replace_multimedia_content);
    	}
     
    	private void updateStates() {
    		final String type = mIntent.getType();
    		if (type == null)
    			return;
     
    		mTextAddMultimedia.setText(R.string.text_replace_multimedia_content);
     
    		if (type.equals("audio/*")) {
    			mImageAddMultimedia.setImageResource(R.drawable.sound);
    		} else if (type.equals("video/*")) {
    			mImageAddMultimedia.setImageResource(R.drawable.video);
    		} else if (type.equals("image/*")) {
    			mImageAddMultimedia.setImageURI((Uri) mIntent
    					.getParcelableExtra(Intent.EXTRA_STREAM));
    		} else {
    			mImageAddMultimedia.setImageResource(getDefaultImage());
    		}
    	}
     
    	@Override
    	public void onClick(DialogInterface dialog, int which) {
    		switch (which) {
    		case (0):
    			takeSound();
    			break;
    		case (1):
    			takePicture();
    			break;
    		case (2):
    			takeVideo();
    			break;
    		default:
    			break;
    		}
    	}
     
    	private void takePicture() {
    		final Intent i = new Intent(
    				android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    		startActivityForResult(i, REQUEST_TAKE_PICTURE);
    	}
     
    	private void takeVideo() {
    		final Intent i = new Intent(
    				android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
    		startActivityForResult(i, REQUEST_TAKE_VIDEO);
    	}
     
    	private void takeSound() {
    		final Intent intent = new Intent(this, SoundRecorderActivity.class);
    		intent.putExtra(SoundRecorderActivity.EXTRA_OUTPUT, AUDIO_TMP_FILE);
    		startActivityForResult(intent, REQUEST_TAKE_SOUND);
    	}
     
    	@Override
    	public Object onRetainNonConfigurationInstance() {
    		final List<Object> data = new ArrayList<Object>();
    		data.add(0, mIntent);
    		data.add(1, mTextComment.getText().toString());
    		return data;
    	}
     
    	@Override
    	public void onClick(View v) {
    		final int id = v.getId();
    		if (id == R.id.text_share_add_multimedia
    				|| id == R.id.btn_share_add_multimedia) {
    			showAddMultimediaPopup();
    		} else if (id == R.id.btn_share) {
    			share();
    		}
    	}
     
    	private void share() {
    		final String shareText = getShareText();
    		mIntent.putExtra(Intent.EXTRA_TEXT, shareText);
    		mIntent.putExtra(Intent.EXTRA_TITLE, shareText);
    		mIntent.putExtra(Intent.EXTRA_SUBJECT, getShareSubject());
     
    		startActivity(Intent.createChooser(mIntent,
    				getString(R.string.text_sharing_popup)));
    	}
     
    	protected String getShareText() {
    		final String commentText = getComment();
     
    		return String.format(getString(R.string.share_restaurant_message),
    				commentText, getString(R.string.url_restaurant));
    	}
     
    	protected String getShareSubject() {
    		return String.format(getString(R.string.share_restaurant_subject),
    				getString(R.string.name_restaurant));
    	}
     
    	private void showAddMultimediaPopup() {
    		final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    		builder.setTitle(R.string.share_choose);
    		builder.setItems(R.array.share_methods, this);
    		builder.create().show();
    	}
     
    	protected String getComment() {
    		return mTextComment.getText().toString();
    	}
     
    }

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Par défaut
    Merci pour ton aide.

    En réalité maintenant, j'arrive bien à enregistrer une photo

    Le soucis que je rencontre est que celle-ci n'est pas tourné par défaut à la verticale mais en penchée à l'horizontal. Je cherche donc d'ou cela peut-il provenir ...

  17. #17
    Expert confirmé

    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
    Par défaut
    De mémoire.
    Il me semble que tu dois appliquer une rotation à ton image en fonction de l'orientation du smartphone

    http://www.developpez.net/forums/d11...hoto-jpg-sens/

    Pour connaître l'orientation du smartphone
    http://developer.android.com/referen...ation%28int%29

    Cet exemple te montre comment mettre à jour ta caméra , si tu ne le souhaite pas à toi de sauvegarder l'orientation et après de mettre à jour ta photo en fonction de celle-ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void onOrientationChanged(int orientation) {
         if (orientation == ORIENTATION_UNKNOWN) return;
         android.hardware.Camera.CameraInfo info =
                new android.hardware.Camera.CameraInfo();
         android.hardware.Camera.getCameraInfo(cameraId, info);
         orientation = (orientation + 45) / 90 * 90;
         int rotation = 0;
         if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
             rotation = (info.orientation - orientation + 360) % 360;
         } else {  // back-facing camera
             rotation = (info.orientation + orientation) % 360;
         }
         mParameters.setRotation(rotation);
     }

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 422
    Par défaut
    Merci encore pour ton aide

    Je ne suis pas sur d'avoir compris ce qu'il faut que je fasse :

    Pour le moment, ma preview s'affiche correctement (bien verticale et ce, grâce à la fonction static fournit dans la doc : setCameraDisplayOrientation()).
    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
    public static void setCameraDisplayOrientation(Activity activity,
    			int cameraId, android.hardware.Camera camera) {
    		android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
    		android.hardware.Camera.getCameraInfo(cameraId, info);
    		int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
    		int degrees = 0;
    		switch (rotation) {
    		case Surface.ROTATION_0:
    			degrees = 0;
    			break;
    		case Surface.ROTATION_90:
    			degrees = 90;
    			break;
    		case Surface.ROTATION_180:
    			degrees = 180;
    			break;
    		case Surface.ROTATION_270:
    			degrees = 270;
    			break;
    		}
     
    		int result;
    		if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
    			result = (info.orientation + degrees) % 360;
    			result = (360 - result) % 360; // compensate the mirror
    		} else { // back-facing
    			result = (info.orientation - degrees + 360) % 360;
    		}
    		camera.setDisplayOrientation(result);
    	}
    Le soucis est que lorsque sa enregistre, l'image est correctement orientée mais c'est la rotation de celle-ci qui est, par défaut, mal configurée.

    Effectivement, l'image est pivotée à 90° dans le sens des aiguilles d'une montre alors que je la voudrai comme sur la preview, cad bien verticale (donc à faire pivoter une fois vers la gauche).

    J'ai bien essayé de faire un avant mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    camera.setParameters(p);
    mais cela n'y change rien ...

    N'y a t-il pas quelque chose à spécifier au niveau des informations exif de l'image ?

Discussions similaires

  1. [Débutant] Manipulation d'images : intégrer une image dans une image
    Par noscollections dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/10/2014, 11h51
  2. [Image]charger une image sur une page HTML
    Par Malo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/07/2006, 18h33
  3. Insérer une légende dans une image avec une police plus petite
    Par Paulinho dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 3
    Dernier message: 29/04/2006, 14h19
  4. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 13h39
  5. VBA : copier une image d'une feuille excel à une autre
    Par Equus dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/12/2005, 14h01

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