2012-03-06 17 views
6

Estoy tratando de poner la cámara en una superficie Ver en orientación vertical en el teléfono Android. Usé http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html para poner la cámara en SurfaceView. Sin embargo, la cámara gira 90 grados, por lo que traté de hacer setDisplayOrientation (90) para solucionarlo, pero esto aplasta la imagen (¿Probablemente no está redimensionando la superficie correctamente?). ¿Cómo puedo hacerlo para que la cámara no quede aplastada?La cámara se extiende en modo retrato

Respuesta

6

Debe cambiar el tamaño de la imagen de acuerdo con la rotación. Ver here para un ejemplo.

+0

¿Qué deben altura y anchura de estar en ese ejemplo? Quiero que la vista previa sea aproximadamente la mitad de la pantalla, pero no quiero codificar los valores para que pueda funcionar en diferentes tamaños de pantalla – user1154920

+0

Este es el método de devolución de llamada de SurfaceHolder, por lo que los parámetros de altura y ancho del método serán establecidos por hardware. Si desea que su vista previa sea la mitad de la pantalla, simplemente configúrelos en las declaraciones 'if' como: parameters.setPreviewSize (width/2, height/2); –

2

Si usaba demostraciones de Android API, debe modificar la función OnLayout().

Básicamente, la demostración de la API de Android establece el tamaño de vista previa de acuerdo con la relación de aspecto para que la imagen de vista previa se aplaste y se muestre en el centro de la pantalla con un tamaño pequeño en modo vertical.

Incluso si configuramos la orientación de la pantalla en el modo vertical, el ancho y el alto de la vista previa no se modifican. Es por eso que la imagen de vista previa fue aplastada.

-2

uso de esta función tamaño de imagen para la que será de utilidad para usted

public Bitmap resize(Bitmap img,int Width,int Height){ 

    int width = img.getWidth(); 

    int height = img.getHeight(); 

    int newWidth = (int) Width; 

    int newHeight = (int) Height; 

    // calculate the scale - in this case = 0.4f 
    float scaleWidth = ((float) newWidth)/width; 

    float scaleHeight = ((float) newHeight)/height; 

    // createa matrix for the manipulation 
    Matrix matrix = new Matrix(); 

    // resize the bit map 
    matrix.postScale(scaleWidth, scaleHeight); 

    // rotate the Bitmap 
    //matrix.postRotate(45); 

    // recreate the new Bitmap 
    Bitmap resizedBitmap = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true); 

    return resizedBitmap; 

} 
0

Lo único que trabajó para mí es

En el código mCamera.setDisplayOrientation(90);

El diseño tiene fill_parent para ambos height y width.

Y archivo de manifiesto tiene android:screenOrientation="portrait"

Cuestiones relacionadas