Salvare immagini

di il
7 risposte

Salvare immagini

Ciao a tutti
sono alle prime armi con android e sto creando un app che faccia partire la fotocamera e poi salvi l'immagine da me scattata in memoria.
fino allo scatto ci sono,poi come faccio a salvarla su una memoria interna?
e vorrei passare la stessa immagine quando lancio una seconda activity,come posso passarla come parametro? o c'è qualche altra soluzione?

grazie a tutti!

7 Risposte

  • Re: Salvare immagini

    Ciao, le API di android permettono di specificare un file dentro al quale verrà salvata l'immagine full-size che l'utente scatterà con la fotocamera. Per indicare quale file creare è necessario inserire un extra all'intent che si occupa di richiedere la fotocamera:
    
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    
    File foto = null;
    foto = new File( .... );
    
    if (foto != null) {
       intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(foto));
       startActivityForResult(intent, REQUEST_CODE);
    }
    
    Una volta che l'utente scatterà una foto, questa sarà salvata al path specificato. Il consiglio è quello di salvare le foto nella scheda SD, se possibile (cosa che richiede un opportuno permesso).

    Se invece della foto full-size ti basta l'anteprima puoi risparmiarti tutto questo codice e ottenere l'anteprima direttamente dall'intent che restituisce la fotocamera:
    
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            Bitmap imageBitmap = (Bitmap) extras.get("data");
        }
    }
    
  • Re: Salvare immagini

    Grazie mille!
    come posso scoprire il path? cioè come faccio a dire di salvare la foto in galleria?
    posso passare la foto ad una seconda activity?

    grazie ancora
  • Re: Salvare immagini

    Il path lo decidi tu! Una volta che la foto è stata scattata puoi anche aggiungerla alla galleria attraverso un intent broadcast! Per "passarlo ad un'altra activity basta che passi il path del file..


    Sent from my iPhone using Tapatalk
  • Re: Salvare immagini

    Della ha scritto:


    Il path lo decidi tu!
    mmmm scusa ma non capisco..
    ti posto il mio codice
    
    public class Main extends Activity implements OnClickListener{
    	
    	private static final int CAMERA_REQUEST = 123; // identifica l'intent
    	private Bitmap foto;	//nome della foto
    	private String currentPhotoPath; //percorso
    	File mOutputFile = null; //file che conterrà l'immagine
    	private Button mButtonCamera,mButtonOk; // bottoni camera e ok
    	private ImageView mImageCamera; //spazio di visualizzazione dell'immagine
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main); // mostriamo il layout del main
            
            mButtonCamera = (Button) this.findViewById(R.id.btn_camera); //prendiamo il pulsante
            mButtonCamera.setOnClickListener(this); // aggiungiamo il listener
            mButtonOk = (Button) this.findViewById(R.id.btn_confirm);
            mButtonOk.setEnabled(false);
            mButtonOk.setOnClickListener(this);
            mImageCamera = (ImageView) this.findViewById(R.id.imageCamera); // prendiamo imageview
           
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        @Override
    	public void onClick(View v) {
    		if(v.getId() == R.id.btn_camera) { // se premiamo camera,lanciamo il metodo
    			this.launchCamera();			// launchCamera()
    			mButtonOk.setEnabled(true);
    			
    		}
    		if(v.getId() == R.id.btn_confirm){
    			
    			//TODO se premiamo ok lanciamo un intent che apre la seconda classe 
    			// e passa come parametro la foto
    			
    		}
    		
    	}
    	
    	
        private void launchCamera() {
        	Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if(cameraIntent.resolveActivity(getPackageManager()) != null) {
                File photo = null;
                try {
                    photo = createImageFile(); // assegno al file il risultato del metodo
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if(photo != null) {
                    //Aggiungo l'URI del file come extra dell'intent
                    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
                    //lancio l'app camera
                    startActivityForResult(cameraIntent, CAMERA_REQUEST);
                }
            }
        }
        
    	@Override
    	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	    if(requestCode == CAMERA_REQUEST) {
    	        mImageCamera.setImageBitmap(decodeCapturedPhoto());
    	    }
    	}
    
    	private File createImageFile() throws IOException {
    	    //creo il nome del file: Photo_<timestamp>
    	    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    	    String fileName = "Photo_" + timeStamp;
    	    //recupero la directory in cui salvare il file
    	   File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    	    
    	    //creo un file vuoto con il nome scelto e l'estensione
    	    //all'interno della directory precedente
    	    File image = File.createTempFile(
    	        fileName, //file name
    	        ".jpg",  //extension
    	        path //directory
    	    );
    	 
    	    //salvo il percorso all'interno della stringa creata all'inizio
    	    currentPhotoPath = image.getAbsolutePath();
    	    Toast.makeText(this, "Image saved to:\n" +
    	    		currentPhotoPath, Toast.LENGTH_LONG).show();
    	    return  image;
    	}
    	
    	private Bitmap decodeCapturedPhoto() {
    		 
    	    //recupero le dimensioni dell'ImageView
    	    //che ospiterà l'immagine catturata
    	    int imgViewW = mImageCamera.getWidth();
    	    int imgViewH = mImageCamera.getHeight();
    	 
    	    //creo un oggetto BitmapFactory.Options
    	    BitmapFactory.Options options = new BitmapFactory.Options();
    	    //dico all'oggetto creato di non decodificare tutta l'immagine
    	    //ma solo le sue dimensioni
    	    options.inJustDecodeBounds = true;
    	 
    	    //eseguo la prima decodifica
    	    BitmapFactory.decodeFile(currentPhotoPath, options);
    	 
    	    //recupero le dimensioni dell'immagine decodificata
    	    int photoW = options.outWidth;
    	    int photoH = options.outHeight;
    	 
    	    //calcolo il rapporto di ridimensionamento dell'immagine
    	    //per ridimensionarla senza distorcerla
    	    int ratio = Math.min(photoW/imgViewW, photoH/imgViewH);
    	 
    	    //dico alla BitmapFactory che d'ora in poi deve decodificare
    	    //tutta l'immagine
    	    options.inJustDecodeBounds = false;
    	    //imposto il rapporto di ridimensionamento
    	    options.inSampleSize = ratio;
    	 
    	    //decodifico il file e lo restituisco come Bitmap
    	    Bitmap photoBitmap = BitmapFactory.decodeFile(currentPhotoPath, options);
    	    return photoBitmap;
    	}
    	
    	
    }
    
    a me esce che lo salva ma non trovo la foto
  • Re: Salvare immagini

    Con il metodo "createImageFile()" crei esattamente il file di cui stavano parlando..
    Per sapere il path stampa il valore del file
    File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    Sent from my iPhone using Tapatalk
  • Re: Salvare immagini

    Grazie mille,
    dice storage/emulated/0/ che però non trovo sul telefono
  • Re: Salvare immagini

    Prova ad attaccare il dispositivo al pc e, tramite il file Explorer del DDMS presente su Eclipse, prova a navigare fra le cartelle del dispositivo..dovresti trovarlo!


    Sent from my iPhone using Tapatalk
Devi accedere o registrarti per scrivere nel forum
7 risposte