Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Vista previa de la cámara Android a la imagen final

Hemos estado construyendo una actividad personalizada de la cámara Android donde un rectángulo se superpone dentro de la vista previa de la cámara y cuando se captura la foto (pulsando un botón), queremos recortar el área rectangular correspondiente de la imagen final. El problema es que aún no hemos descubierto cómo android asigna la pantalla de vista previa a la imagen final.

Hemos probado la siguiente fórmula pero sólo funciona en algunos casos:

  • Android gira las imágenes en 90 grados (tomadas por la cámara)
  • Corregir la relación de aspecto y la rotación de la aplicación de la cámara Android
  • ¿Cómo implementar la funcionalidad de la cámara con opciones adicionales (como Panorama)?
  • Varias cámaras en libgdx (probablemente similar en otros marcos)
  • Cómo hacer que el selector de intenciones para la aplicación de cámara o galería en android como whatsapp editprofile?
  • ¿Qué es "antibanding" en la fotografía?
  • Sea xey las coordenadas de la esquina superior izquierda del rectángulo como se muestra en la vista previa de la cámara.

    Deje que la vista previa y la vista previa sean el ancho y la altura de la vista previa de la cámara. Estos son obtener utilizando una función getBestPreviewSize (), que los bucles a través de los tamaños de vista previa admitidos y selecciona el más grande. Supongamos que son 1280 y 720.

    Deje que picture_width y picture_height sean el ancho y la altura de la imagen final según lo soportado por la cámara. Para nuestro propósito, supongamos que es 1632 * 1224 (en un Sony Ericsson XPERIA esto corresponde a los 2 MP).

    Queremos encontrar x_map, y_map que son las xey del rectángulo de recorte de la imagen final.

    Luego por la regla de la analogía, la fórmula que usamos fue:

    X_map = picture_width * x / preview_width; Y_map = picture_height * y / preview_height;

    Sin embargo, esto no parece funcionar en todos los casos. Hemos descubierto que cuando las dimensiones de pantalla del teléfono son similares al tamaño de vista previa, esta fórmula casi funciona (aproximadamente, con un pequeño error).

    Sin embargo, para otros casos como el Sony XPERIA teléfono, donde las dimensiones de la pantalla son: anchura: 480 y altura: 854, la fórmula falla.

    Por ejemplo, para x = 50, entonces x_map = 1632 * 50/1280 = 63.75 Sin embargo este número, como se muestra por el área del rectángulo recortado de la imagen final, no corresponde realmente al rectángulo en el área de vista previa. Está muy lejos. Nuestra fórmula no tiene en cuenta las dimensiones de la pantalla, aunque la experimentación con la modificación para dar cuenta de ellas, no ha producido resultados deseables.

    Sospechamos que el mapeo entre el tamaño de vista previa y la imagen final de alguna manera tiene en cuenta las dimensiones de la pantalla, pero no han descubierto exactamente, ya que no hay documentación sobre él y después de buscar extensamente respuestas en la web nada relevante surgió. Creemos que hay un cierto factor de escala y proporción de aspecto que debemos tener en cuenta antes de aplicar la regla de la analogía, para que la fórmula funcione bien.

    ¿Conoces una fórmula correcta para lo anterior?

  • Medición de intensidades de luz desde la cámara Android
  • ¿Cómo tomar varias fotos antes de descartar la intención de la cámara?
  • ¿Es posible medir la distancia al objeto con la cámara?
  • ¿Qué significa SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS?
  • API de la cámara: problemas con dispositivos cruzados
  • La aplicación Phonegap se cierra después de que la cámara capture la imagen.
  • One Solution collect form web for “Vista previa de la cámara Android a la imagen final”

    Primero, obtenga el tamaño de imagen más grande devuelto por Camera.getSupportedPictureSizes – esta es la resolución nativa de su cámara desde la que puede determinar la proporción de aspecto nativo. Cualquier tamaño de imagen o tamaño de vista previa con una relación de aspecto diferente se recortará según `Matrix.ScaleToFit.CENTER '.

    Ver también: https://stackoverflow.com/a/18159351/994834

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.