Aller au contenu

Récupérer chemin de mon image


Femto

Recommended Posts

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

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

  • 1 year later...

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...