Actualmente estoy usando una intención de tomar una foto, como esta:

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 para establecer el tamaño de la imagen como cerca de un cuadrado como sea posible. Así que después de investigar parece que usted necesita para 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, ¿estos trabajan juntos o es una/o? El método que funciona mejor para mis necesidades?

De nuevo, he 96px por 96px cuadro para fotos de perfil de usuario. Después de que el usuario toma la imagen que desea que la imagen ocupe toda la caja, sin estirar. Es la mejor manera para establecer el tamaño en el momento de la foto que se tomaron, o alterar el imageView o bitmap (o …?) después del hecho? O, debería dejar que los usuarios recortar la imagen y puedo definir el área de recorte dimensiones?

Edit: Ver la recompensa a que se actualice la pregunta.

«¿estos trabajan juntos o es una/o?» – o/o. El último es para el uso de la Camera a sí mismo para tomar una foto. El primero es tener alguna otra aplicación que utilice el Camera sí mismo para tomar una foto en su nombre.

OriginalEl autor KickingLettuce | 2013-03-15

4 Comentarios

  1. 16

    Este código me permite elegir la imagen de la galería. De cultivos y el uso de mi relación de aspecto. Hice un código similar para el uso de la cámara. Después de que el usuario toma la foto, inmediatamente se 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);
    Hace este trabajo para capturar la intención también?
    De mucho 🙂
    use la Intención photoPickerIntent = new Intent(«de android.los medios de comunicación.acción.IMAGE_CAPTURE»); para la cámara, y quitar photoPickerIntent.setType(«imagen»/*»);
    Puede usted explicar cuál es la diferencia aquí?
    Si usted quiere tomar de la cámara y no de la galería

    OriginalEl autor KickingLettuce

  2. 6

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

    El único problema con esto, no se escala la imagen correctamente? Yo creo que es necesario hacer algo como esto, pero deja que el usuario recortar la imagen en un cuadrado perfecto cuando están en la aplicación de la cámara. Entonces, si hago algo como esto, me puede encoger la imagen?
    Te pueden encoger con el código de arriba. Pero lo que realmente quiere es cortar, es correcto?
    Sí, necesito de cultivo. De hecho, me lo imaginé… va a publicar a finales de código como respuesta. Gracias por el aporte, aunque en ella… me terminó de tomar una imagen normal con la cámara, a continuación, inmediatamente después, comenzó un nuevo intento para recortar… ver respuesta.

    OriginalEl autor Moesio

  3. 3

    Hacer estos trabajan juntos o es una/o? El método que funciona mejor para mis necesidades?

    No, ellos no trabajan juntos. Cuando se utiliza la cámara con un Intent, está pidiendo al sistema para tomar una foto de usted (es decir, el usuario se le pedirá con el defecto de aplicación de la cámara y toma una foto o escoge uno de la galería).

    Cuando se utiliza el segundo método, puede crear su propio Camera objeto, que es mucho más personalizable que la primera.

    Con el primer método, usted tendrá que escalar la imagen a posteriori, mientras que con el segundo, usted puede tomar la foto directamente en el tamaño correcto, por lo que la principal diferencia es que la primera es controlado por android, y el segundo, por su aplicación directa, por lo el segundo método funciona mejor para sus necesidades. si usted no quiere a escala después.

    Si vas a escala de todos modos (leer más abajo), entonces no importa qué método se utiliza para tomar la foto, yo diría que en ese caso, utilizar el valor predeterminado de la aplicación.

    Es la mejor manera para establecer el tamaño en el momento de la foto que se tomaron, o alterar el imageView o de mapa de bits (o …?) después del hecho? O, debería dejar que los usuarios recortar la imagen y puedo definir el área de recorte dimensiones?

    Que depende de tus necesidades. En el primer caso su aplicación altera la imagen tomada, por lo que usted elija que parte de la imagen original será el final de 96×96 imagen. El problema con este método es que se puede accidentalmente cultivo/strech/manipular la imagen en un mal -o, al menos, inesperado de manera que para el usuario (es decir, la eliminación de parte de su cara).

    Cuando se utiliza el segundo método, se providint el usuario con el libertad para elegir qué parte de la imagen que desea.

    Si usted es capaz de detectar automáticamente la mejor porción de la imagen original, usted debe ir con el primer método, pero como en realidad estás preguntando cual es el mejor método, usted realmente debe ir con el segundo, porque proporciona más flexibilidad para el usuario final.

    OriginalEl autor Twinone

  4. 2

    (1) ¿cómo puede ser auto recortada para que se adapte a mi ImageView (96dp x 96dp),

    Parece que ya tiene una solución para la obtención de la cosecha correcta. Si desea convertir la densidad de la unidad de píxel a píxel de la unidad que se corresponde con el teléfono, usted necesita usar el

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

    Así que usted puede utilizar después 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 necesitan ser cargados de forma rápida en ListViews. Así que en lugar de un 1MB pic ser subir, necesito uno más como 2,000 k.

    Si el uso de la imagen que están alrededor de el tamaño de 96dp, usted realmente no necesita preocuparse acerca de los tamaños de la imagen. La creación y destrucción de los nuevos mapas de bits es generalmente de muy peligroso cuando se intenta hacer varios de ellos en una actividad. Fácilmente se puede ejecutar en cuestiones tales como «problemas de falta de Memoria. Por lo tanto, es más recomendable usar Uri del lugar. Así, salvar la uri a la que usted está poniendo en el intento, y hacer una lista de uris’ para mostrar en el listview sin embargo que usted desea.

    En un imageview, es setImageURI(Uri uri).

    La esperanza de que las respuestas a todas sus preguntas.

    OriginalEl autor Calvin Park

Dejar respuesta

Please enter your comment!
Please enter your name here