Vista de la superficie de la cámara

En el modo vertical, las imágenes parecen estiradas verticalmente y en el modo horizontal parecen estiradas horizontalmente.

Aunque después de capturar la imagen aparece en tamaño adecuado .

Cómo resolver este problema?

5 Solutions collect form web for “Vista de la superficie de la cámara”

Debe elegir un tamaño de vista previa que coincida con el tamaño de su pantalla. Yo sugeriría cambiar la configuración de tamaño de vista previa para que coincida con su SurfaceView lugar de al revés. Mientras que los datos de vista previa están bien, no está distorsionado, se verá distorsionado cuando se lanza sobre una superficie con diferentes proporciones.

Si usted tiene una vista de pantalla completa, entonces usted debe encontrar la cámara tiene un tamaño de vista previa que coincida con ese tamaño – por lo menos habrá uno con la misma relación de aspecto. Por ejemplo, si su pantalla es de 640×480, entonces un tamaño de vista previa 320×240 no aparecerá estirado en una pantalla completa SurfaceView .

Tienes que restringir tu tamaño de vista previa basado en (1) tamaños de vista previa disponibles (2) en tu vista. Aquí está mi solución si todavía la necesita:

 private class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder mHolder; private Camera mCamera; public CameraPreview(Context context, Camera camera) { super(context); mCamera = camera; // Install a SurfaceHolder.Callback so we get notified when the // underlying surface is created and destroyed. mHolder = getHolder(); mHolder.addCallback(this); // deprecated setting, but required on Android versions prior to 3.0 mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } private void startPreview() { try { /** * Orientation should be adjusted, see http://stackoverflow.com/questions/20064793/how-to-fix-camera-orientation/26979987#26979987 */ Camera.Parameters parameters = mCamera.getParameters(); List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes(); Camera.Size previewSize = null; float closestRatio = Float.MAX_VALUE; int targetPreviewWidth = isLandscape() ? getWidth() : getHeight(); int targetPreviewHeight = isLandscape() ? getHeight() : getWidth(); float targetRatio = targetPreviewWidth / (float) targetPreviewHeight; Log.v(TAG, "target size: " + targetPreviewWidth + " / " + targetPreviewHeight + " ratio:" + targetRatio); for (Camera.Size candidateSize : previewSizes) { float whRatio = candidateSize.width / (float) candidateSize.height; if (previewSize == null || Math.abs(targetRatio - whRatio) < Math.abs(targetRatio - closestRatio)) { closestRatio = whRatio; previewSize = candidateSize; } } Log.v(TAG, "preview size: " + previewSize.width + " / " + previewSize.height); parameters.setPreviewSize(previewSize.width, previewSize.height); mCamera.setParameters(parameters); mCamera.setPreviewDisplay(mHolder); mCamera.startPreview(); } catch (IOException e) { Log.d(TAG, "Error setting camera preview: " + e.getMessage()); } } } 

He arreglado esto añadiendo esto antes de llamar a camera.startPreview ():

 Camera.Parameters parameters = camera.getParameters(); parameters.setPreviewSize(yourSurfaceView.getWidth(), yourSurfaceView.getHeight()); camera.setParameters(parameters); 

Podría ayudar a alguien.

¡La solución es simple! Si utiliza la vista de superficie en la barra de acciones, tal vez el problema. Yo uso esta línea y puedo arreglarlo, pero no pruebo con la barra de acción.

utilizar esta:

 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

Si está hablando de vista previa, intente configurar el tamaño de SurfaceView igual que el tamaño de vista previa de la cámara. De esta manera la vista previa no se debe escalar.

  • Orientación androide - problemas con intentos (cámara)
  • La aplicación cuelga / se congela cuando se utiliza camera.open () - Reinicio del dispositivo necesario
  • Android: tomar fotos y guardarlas con un nombre personalizado en un destino personalizado mediante Intent
  • Androide imagen de la cámara uri de regreso con una falla de resultados ResultInfo
  • facingMode en MediaDevices.getUserMedia no parece funcionar en el último Android Chrome (v53)
  • Cómo capturar los marcos de imagen de vista previa desde la aplicación de cámara en la programación de Android?
  • Luz de flash no detectada
  • Android: cómo mostrar la vista previa de la cámara con devolución de llamada?
  • ¿Cómo usar setCamera (MediaRecorder)?
  • Cuando toma la foto get - java.lang.Throwable: file: // Uri expuesto a través de ClipData.Item.getUri ()
  • Android: Cancelar la cancelación del botón de la cámara
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.