Imposta dimensione della telecamera – Parametri vs intenti?

Attualmente sto usando l'intenzione di scattare una foto, come questa:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); intent.putExtra("return-data", true); startActivityForResult(intent, CAMERA_REQUEST); 

Ma ho davvero bisogno di impostare la dimensione dell'image quanto più vicino a una piazza ansible. Quindi, dopo aver studiato, sembra che devi fare qualcosa di simile:

  • Riciclare Android Maps V2 SupportMapFragment durante la rotazione
  • Convertire l'image JPEG / PNG in formato TIFF in OS android
  • android: come allineare il messaggio in alertDialog?
  • Come faccio ad utilizzare l'ActionBar sulle versioni precedenti di Android?
  • Android: come get il giorno corrente della settimana (lunedì, ecc ...) nella lingua dell'utente?
  • Come faccio a visualizzare una vista come sovrapposizione di un'altra?
  •  Camera camera = Camera.open(); Parameters params = camera.getParameters(); List<Camera.Size> sizes = params.getSupportedPictureSizes(); // Once you will see the supported Sizes, you can define them with the method : setPictureSize(int width, int height); 

    Le mie domande sono: fanno queste cose insieme o è un o / o? Quale metodo funziona meglio per le mie esigenze?

    Ancora una volta, ho 96px da 96px box per le foto del profilo utente. Dopo che l'utente prende l'image voglio che l'image riempisse l'intera casella senza allungarsi. È il modo migliore per impostare la dimensione al punto dell'image in scena, o modificare l' imageView o il bitmap (o …?) Dopo il fatto? O, dovrei lasciare che gli utenti ritagliate l'image e posso definire le size delle aree di ritaglio?

    Modifica: vedi bounty per una domanda aggiornata.

  • Come rimuovere il margine tra l'icona dell'app e il bordo dello schermo in ActionBar?
  • Servizio di messaggistica multipla di Android
  • Qual è il vantaggio di utilizzare SQLite invece di File?
  • Come ripristinare AnimationDrawable
  • Imansible ricevere le trasmissioni per intenti PACKAGE
  • Sostituzione nell'applicazione di chiamata
  • 4 Solutions collect form web for “Imposta dimensione della telecamera – Parametri vs intenti?”

    Questo codice mi permette di scegliere l'image dalla galleria. Ritaglia e utilizza il mio rapporto di aspetto. Ho fatto un codice simile per l'utilizzo della camera. Dopo che l'utente prende l'image, lancia immediatamente un'attività per ritagliare l'image.

      Intent photoPickerIntent = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); photoPickerIntent.setType("image/*"); photoPickerIntent.putExtra("crop", "true"); photoPickerIntent.putExtra("outputX", 150); photoPickerIntent.putExtra("outputY", 150); photoPickerIntent.putExtra("aspectX", 1); photoPickerIntent.putExtra("aspectY", 1); photoPickerIntent.putExtra("scale", true); photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri()); photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); startActivityForResult(photoPickerIntent, RESULT_LOAD_IMAGE); 

    È ansible utilizzare Bitmap.createScaleBitmap(Bitmap src, int destWidth, int destHeight, boolean filter) per ridimensionare una bitmap

    Fanno questi lavori insieme o è uno o / o? Quale metodo funziona meglio per le mie esigenze?

    No, non lavorano insieme. Quando si utilizza la camera con un Intent , si chiede al sistema di scattare una foto per te (ossia l'utente viene richiesto con l'applicazione della camera predefinita e scatta una foto o sceglie una foto dalla galleria).

    Quando utilizzi il secondo approccio, crei il tuo object Camera , che è molto più personalizzabile del primo.

    Con il primo metodo dovrai scalare l'image in seguito, mentre con la seconda puoi scattare direttamente l'image nella dimensione corretta, quindi la differenza principale è che la prima è controllata da android e la seconda dall'applicazione direttamente, quindi il secondo metodo funziona meglio per le tue esigenze. se non si desidera scalare in seguito.

    Se stai comunque scalando (leggi qui sotto), non import quale approccio che utilizzi per scattare la foto, direi in quel caso, utilizzare l'applicazione predefinita .

    È il modo migliore per impostare la dimensione al punto dell'image in scena, o modificare l'image o il bitmap (o …?) Dopo il fatto? O, dovrei lasciare che gli utenti ritagliate l'image e posso definire le size delle aree di ritaglio?

    Questo dipende dalle tue esigenze. Nel primo caso la tua applicazione altera l'image scattata, quindi scegliete quale parte dell'image originale sarà l'ultima foto 96×96. Il problema con questo metodo è che si può accidentalmente tagliare / distruggere / manipolare l'image in modo sbagliato – o alless inatteso – per l'utente (cioè rimuovendo una parte del loro volto).

    Quando si utilizza il secondo metodo, si è forniti all'utente con la libertà di scegliere quale parte della foto che vogliono.

    Se è in grado di rilevare automaticamente la parte migliore dell'image originale, dovresti andare con il primo metodo, ma siccome stai in realtà chiedendo quale sia il metodo migliore, dovresti davvero andare con il secondo , perché offre una maggiore flessibilità l'utente finale.

    (1) come può essere ritagliata automaticamente per adattare il mio ImageView (96dp x 96dp),

    Sembra che tu abbia già una soluzione per get il raccolto corretto. Se si desidera convertire unità di pixel di densità in un'unità a pixel corrispondente al telefono, è necessario utilizzare il button

     public int dpToPixel(int dp) { Resources r = getResources(); float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics()); } 

    Quindi è ansible utilizzare il seguente come extra

     photoPickerIntent.putExtra("outputX", dpToPixel(96)); photoPickerIntent.putExtra("outputY", dpToPixel(96)); 

    (2) Come posso ridurre l'image in formato (fare una nuova bitmap?). Questi devono essere caricati rapidamente su ListViews. Quindi, invece di un pic di 1MB di essere caricato, ho bisogno di uno più come 2.000k.

    Se si utilizza un'image che si trova intorno alla dimensione di 96dp, non è necessario preoccuparsi di size image. La creazione e la distruzione di nuove bitmap sono di solito molto pericolose quando si tenta di fare più di loro in un'attività. Puoi facilmente eseguire problemi come "Out of Memory". Pertanto, è più consigliabile utilizzare Uri invece. Così, salva i uri che state mettendo nell'intento e fai un elenco di uris 'da visualizzare sul listview comunque vuoi.

    Su una image, è setImageURI (Uri uri).

    Spero che risponda a tutte le tue domande.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.