Configurar el tamaño de la cámara – ¿Parámetros vs intención?

Actualmente estoy usando una intención para tomar una foto, así:

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); 

Pero realmente necesito fijar el tamaño de la imagen tan cerca de un cuadrado como sea posible. Así que después de investigar parece que necesitas hacer algo como esto:

 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); 

Mis preguntas son, ¿trabajan estos juntos o es un uno o el otro? ¿Qué método funciona mejor para mis necesidades?

Una vez más, tengo 96px por la caja 96px para las fotos del perfil del usuario. Después de que el usuario toma la foto quiero que la imagen llene la caja entera sin estirar. ¿Es la mejor manera de fijar el tamaño en el punto de la imagen que está tomando, o de alterar el imageView o el bitmap (o …?) Después del hecho? O, ¿debo dejar que los usuarios recorten la imagen y puedo definir las dimensiones del área de recorte?

Editar: Ver recompensa para la pregunta actualizada.

4 Solutions collect form web for “Configurar el tamaño de la cámara – ¿Parámetros vs intención?”

Este código me permite seleccionar la imagen de la galería. Recortar y usar mi relación de aspecto. Hice código similar para usar la cámara. Después de que el usuario toma la imagen, inmediatamente inicia una actividad para recortar la imagen.

  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); 

Puede utilizar Bitmap.createScaleBitmap(Bitmap src, int destWidth, int destHeight, boolean filter) para cambiar el tamaño de un mapa de bits

¿Trabajan estos juntos o es un uno o otro? ¿Qué método funciona mejor para mis necesidades?

No, no trabajan juntos. Cuando usas la cámara con una Intent , estás pidiendo al sistema que tome una foto para ti (es decir, el usuario recibe una solicitud con la aplicación de cámara predeterminada y toma una foto o elige una de la galería).

Cuando utiliza el segundo enfoque, crea su propio objeto de Camera , que es mucho más personalizable que el primero.

Con el primer método que tendrá que escalar la imagen después, mientras que con el segundo, puede tomar la imagen directamente en el tamaño correcto, por lo que la principal diferencia es que el primero está controlado por Android, y el segundo por su aplicación directamente, Por lo que el segundo método funciona mejor para sus necesidades. Si no desea escalar después.

Si usted va a escalar de todos modos (lea abajo), entonces no importa qué enfoque se utiliza para tomar la foto, yo diría que en ese caso, utilizar la aplicación predeterminada .

¿Es la mejor manera de fijar el tamaño en el punto de la imagen que está tomando, o de alterar el imageView o el mapa de bits (o …?) Después del hecho? O, ¿debo dejar que los usuarios recorten la imagen y puedo definir las dimensiones del área de recorte?

Eso depende de tus necesidades. En el primer caso, la aplicación cambia la imagen tomada, por lo que elige la parte de la imagen original que será la imagen final de 96×96. El problema con este método es que puede accidentalmente recortar / estirar / manipular la imagen de manera incorrecta -o al menos, inesperada- para el usuario (es decir, eliminar parte de su cara).

Cuando se utiliza el segundo método, se le proporciona al usuario la libertad de elegir qué parte de la imagen que desea.

Si usted es capaz de detectar automáticamente la mejor parte de la imagen original, debe ir con el primer método, pero como usted está preguntando realmente cuál es el mejor método, realmente debería ir con el segundo , porque proporciona más flexibilidad para El usuario final.

(1) cómo se puede recortar automáticamente para caber mi ImageView (96dp x 96dp),

Parece que ya tienes una solución para obtener el cultivo correcto. Si desea convertir la unidad de píxeles de densidad en unidad de píxeles que corresponde al teléfono, debe utilizar

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

Así que puede usar como extra

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

(2) ¿Cómo puedo reducir la imagen en tamaño (hacer un nuevo mapa de bits?). Estos deben cargarse rápidamente en ListViews. Así que en lugar de una imagen de 1 MB de cargar, necesito una más como 2.000k.

Si utiliza imágenes de aproximadamente el tamaño de 96dp, no necesita preocuparse por los tamaños de imagen. Crear y destruir nuevos mapas de bits suele ser muy peligroso cuando intenta hacer varios de ellos en una actividad. Usted puede funcionar fácilmente en ediciones tales como "fuera de memoria" ediciones. Por lo tanto, es más recomendable usar Uri en su lugar. Por lo tanto, guarde el uri que está poniendo en la intención, y hacer una lista de uris 'para mostrar en la lista, sin embargo, desea.

En una vista de imagen, es setImageURI (Uri uri).

Espero que responda todas sus preguntas.

  • Android añadiendo imagen a la foto tomada con la cámara
  • Camera.open () no funciona android
  • Uso de la intención de utilizar la cámara en Android
  • Objeto de cámara siempre devuelve nulo
  • Biblioteca Wrapper para Android API de cámara
  • Problema de cierre de cámara en Samsung Galaxy S3 versión 4.1.1
  • Android MediaCodec y la cámara: ¿cómo lograr una mayor velocidad de fotogramas para obtener datos de marco de la cámara?
  • La cámara personalizada Android se bloquea en el curriculum vitae
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.