Femto Posté(e) 16 novembre 2010 Share Posté(e) 16 novembre 2010 Bonsoir, Je développe une application qui fait appel à l'appareil photo et qui quand je prend la photo je lui donne un titre et un nom d'affichage. Le problème est que ma photo s'enregistre bien mais non pas avec le nom d'affichage que je lui donne mais avec une suite de chiffres (ex:12899656565.jpg). En gros pour l'affichage de mon image est impossible puisque l'image ne contient pas le nom que je lui donne (je lui donne comme nom la date à laquelle elle à été crée) Voilà ma méthode onPictureTaken: @Override public void onPictureTaken(byte[] data, Camera camera) { // TODO Auto-generated method stub String filename = "Img" + timeStampFormat.format(new Date()); String fl = filename + ".jpg"; ContentValues values = new ContentValues(); //titre et nom d'affichage values.put(Media.TITLE, fl); values.put(Media.DISPLAY_NAME, fl); //enregistrer dans /sdcard/DCIM/Camera Uri uri = getContentResolver().insert(Images.Media.EXTERNAL_CONTENT_URI, values); OutputStream os; try { os=getContentResolver().openOutputStream(uri); os.write(data); os.flush(); os.close(); Log.e(getClass().getSimpleName(),"Réussi"); } catch (FileNotFoundException e) { // TODO: handle exception Log.e(getClass().getSimpleName(), "Fichier non trouvé à l'écriture de l'image",e); } catch (IOException e) { // TODO Auto-generated catch block Log.e(getClass().getSimpleName(), "Erreur E/S à l'enregistremnt de l'image",e); e.printStackTrace(); } Intent intent = new Intent(); //passage en paramètres du nom de mon image pour stocker dans la bdd intent.putExtra(SetText.FILE_NAME, filename); setResult(RESULT_OK, intent); finish(); } Quelqu'un aurait il une idée de comment créer mon image avec un nom que je prédéfini moi ? Ou sinon récupérer le nom générer automatiquement (ex: 2323131313.jpeg) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Femto Posté(e) 16 novembre 2010 Auteur Share Posté(e) 16 novembre 2010 Bon trouvé, j'ai opté pour créer un dossier sur la sdcard qui contiendra mes images et j'écris dedans. Pour ceux que ça intéresse : package com.cardoso.localisationtpg; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import android.app.Activity; import android.content.Intent; import android.hardware.Camera; import android.hardware.Camera.PictureCallback; import android.hardware.Camera.ShutterCallback; import android.hardware.Camera.Size; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.KeyEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; public class PhotoCam extends Activity implements SurfaceHolder.Callback,PictureCallback,ShutterCallback{ private SurfaceView surfaceView; private SurfaceHolder surfaceHolder; private Camera camera = null; private SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss"); private boolean isPreviewRunning = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.camera); surfaceView= (SurfaceView) findViewById(R.id.SurfaceView); surfaceHolder=surfaceView.getHolder(); surfaceHolder.addCallback(this); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); } protected void onResume() { Log.e(getClass().getSimpleName(), "onResume"); super.onResume(); } protected void onStop() { Log.e(getClass().getSimpleName(), "onStop"); super.onStop(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) { if (isPreviewRunning) { camera.stopPreview(); } // Now that the size is known, set up the camera parameters and begin // the preview. Camera.Parameters parameters = camera.getParameters(); List<Size> sizes = parameters.getSupportedPreviewSizes(); Size optimalSize = getOptimalPreviewSize(sizes, width, height); parameters.setPreviewSize(optimalSize.width, optimalSize.height); this.camera.setParameters(parameters); try { this.camera.setPreviewDisplay(holder); this.camera.startPreview(); isPreviewRunning = true; } catch (IOException e) { // TODO: handle exception } } @Override public void surfaceCreated(SurfaceHolder holder) { camera=Camera.open(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { camera.stopPreview(); isPreviewRunning = false; camera.release(); } public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { camera.takePicture(PhotoCam.this, null, PhotoCam.this); return true; } return false; } @Override public void onShutter() { // TODO Auto-generated method stub Log.e(getClass().getSimpleName(), "Photo !"); } @Override public void onPictureTaken(byte[] data, Camera camera) { // TODO Auto-generated method stub String fl = timeStampFormat.format(new Date())+ ".jpg"; String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/data/"+getPackageName(); // Current state of the external media String extState = Environment.getExternalStorageState(); // External media can be written onto if (extState.equals(Environment.MEDIA_MOUNTED)) { try { // Make sure the path exists boolean exists = (new File(path)).exists(); if (!exists){ new File(path).mkdirs(); } // Open output stream FileOutputStream fOut = new FileOutputStream(path + "/"+fl); Log.e("lol", path+fl); fOut.write(data); // Close output stream fOut.flush(); fOut.close(); } catch (IOException ioe) { ioe.printStackTrace(); } } Intent intent = new Intent(); intent.putExtra(SetText.FILE_NAME, fl); setResult(RESULT_OK, intent); // return the intent content finish(); // finish the activity } private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) { final double ASPECT_TOLERANCE = 0.05; double targetRatio = (double) w / h; if (sizes == null) return null; Size optimalSize = null; double minDiff = Double.MAX_VALUE; int targetHeight = h; // Try to find an size match aspect ratio and size for (Size size : sizes) { double ratio = (double) size.width / size.height; if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; if (Math.abs(size.height - targetHeight) < minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } // Cannot find the one match the aspect ratio, ignore the requirement if (optimalSize == null) { minDiff = Double.MAX_VALUE; for (Size size : sizes) { if (Math.abs(size.height - targetHeight) < minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } } return optimalSize; } } Lien vers le commentaire Partager sur d’autres sites More sharing options...
Soumy Posté(e) 3 janvier 2012 Share Posté(e) 3 janvier 2012 J'ai un NullPointerException au niveau de cette ligne la . parameters.setPreviewSize(optimalSize.width, optimalSize.height); Pourquoi ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.