studio open example developer custom android

open - Cámara Android en retrato en SurfaceView



open camera android developer (6)

A partir de API lvl 8, esto está disponible:

public final void setDisplayOrientation (int degrees)

es decir, con portait en el manifiesto:

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

Intenté varias cosas para intentar que la vista previa de la cámara se muestre en vertical en un SurfaceView . Nada funcionó. Estoy probando en un Droid que tiene 2.0.1. Lo intenté:

1) forzar el diseño a ser retratado por: this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

2) usando

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

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

Gracias, Prasanna



No es necesario que establezca ningún parámetro para la orientación hasta que necesite hacerlo explícitamente. Por defecto, es compatible con esta instalación. En mi caso, tengo una actividad y encima de esa actividad tengo una vista de cámara, así que no establecí ninguna orientación para las propiedades de la cámara, en cambio para la actividad configuré la orientación como retrato en el archivo de Manifiesto. ahora la aplicación se ve y funciona bien. Podría ser útil para alguien ...

Gracias.



Puedes probar esto (bueno para 2.2 o menos). Aquí giro la imagen antes de guardarla en la tarjeta sd. Pero es solo para el modo vertical. Si tenía que hacerlo para ambos modos, debería verificar la orientación de la cámara y verificar 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 { } } };


Tengo una solución de trabajo para el modo retrato que trabaja en 2.1 (probado en Desire) quizás menos.

La orientación de la pantalla de actividad está configurada en vertical. (android: 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á retrato.

SurfaceHolder que utiliza para la cámara debe tener un tamaño compatible con la resolución de pantalla del tamaño de vista previa del teléfono.

Funny on Desire 2.2 no funciona ... 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);