Pregunta

He intentado varias cosas para tratar de obtener la vista previa de la cámara a aparecer en el retrato en un SurfaceView. Nada funcionó. Estoy probando en un Droid que tiene 2.0.1. Probé:

1) forzando la disposición a ser retrato por: this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

2) utilizando

Camera.Parameters parameters = camera.getParameters();
parameters.set("orientation", "portrait");
parameters.setRotation(90);
camera.setParameters(parameters);

¿Hay algo más que pueda probar? Si esto un error en Android o el teléfono cómo puedo estar seguro de que este es el caso, por lo que tengo pruebas para informar al cliente?

Gracias, Prasanna

No hay solución correcta

Otros consejos

A partir de API lvl 8, está disponible:

pública final setDisplayOrientation vacío (int grados)

es decir. con el portait en el manifiesto:

public void surfaceCreated(SurfaceHolder holder) {
    mCamera = Camera.open();
    mCamera.setDisplayOrientation(90);

i tiene un solución de trabajo para el modo de retrato de trabajo en 2,1 (probado en Desire) tal vez menos.

Actividad orientación de la pantalla se establece en el retrato. (Androide: screenOrientation = "retrato")

los parámetros de la cámara:

Camera.Parameters p = mCamera.getParameters ();

 p.set("jpeg-quality", 100);
 p.set("orientation", "landscape");
 p.set("rotation", 90);
 p.setPictureFormat(PixelFormat.JPEG);
 p.setPreviewSize(h, w);// here w h are reversed
 mCamera.setParameters(p);

y la imagen será vertical.

SurfaceHolder utiliza para la cámara debe estar en un tamaño compatible con el tamaño del teléfono de previsualización resolución de la pantalla usualy.

El deseo divertido en 2.2 no está funcionando ... Aquí está la solución:

   At surfaceCreated(..) or when you have this line
camera = Camera.open();
       add
camera.setDisplayOrientation(90);//only 2.2>

Camera.Parameters p = camera.getParameters();
    p.set("jpeg-quality", 100);
p.setRotation(90);
p.setPictureFormat(PixelFormat.JPEG);
p.setPreviewSize(h, w);
camera.setParameters(p);

Puede probar esto (bueno para 2,2 o por debajo). Aquí puedo rotar la imagen antes de guardarla en una tarjeta SD. Pero es sólo para el modo de retrato. Si usted tuviera que hacer tanto para el modo entonces usted debe comprobar la orientación de la cámara y poner un poco de comprobación antes de capturar la imagen.

PictureCallback jpegCallback = new PictureCallback() {
   public void onPictureTaken(byte[] data, Camera camera) {
      FileOutputStream outStream = null;
      try {
        imageFilePath = getFilename();
        InputStream is = new ByteArrayInputStream(data);
        Bitmap bmp = BitmapFactory.decodeStream(is);
        // Getting width & height of the given image.
        if (bmp != null){
           int w = bmp.getWidth();
           int h = bmp.getHeight();
           // Setting post rotate to 90
           Matrix mtx = new Matrix();
           mtx.postRotate(90);
           // Rotating Bitmap
           Bitmap rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true);
           ByteArrayOutputStream stream = new ByteArrayOutputStream();
           rotatedBMP.compress(Bitmap.CompressFormat.PNG, 100, stream);
           byte[] byteArray = stream.toByteArray(); 
           outStream = new FileOutputStream
                              (String.format(imageFilePath,System.currentTimeMillis()));
           outStream.write(byteArray);
           outStream.close();
        } else {
           outStream = new FileOutputStream
                              (String.format(imageFilePath,System.currentTimeMillis()));
           outStream.write(data);
           outStream.close();           
        }       

        preview.camera.startPreview();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
    }
  }
};

No hay manera de hacer esto en muchos dispositivos actuales, incluyendo el G1 y el Droid. Echar un vistazo al informe de error relevante aquí:

También ver un comentario de uno de los ingenieros de Android (Dave) aquí:

El enlace romana dio de la rosca problema tiene una solución viable que estoy usando ahora.

Aquí lo encontrará: http://code.google.com/p/android/issues / detalle? id = 1193 # c26

No hay necesidad de que es necesario establecer los parámetros para la orientación hasta que tenga que hacerlo de forma explícita. Por defecto, es compatible con esta instalación. En mi caso, tengo una actividad y por encima de que la actividad i tener una visión de la cámara, así que no se estableció ninguna orientación de las propiedades de la cámara, en lugar de la actividad i establecer la orientación de retrato como en el archivo de manifiesto. ahora la apariencia de aplicaciones y funciona bien. Podría ser útil para alguien ..

Gracias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top