9

根据 Android 开发者网站:

android 2.2之后有这个功能

“设置显示方向”

调整相机预览旋转。

并且根据 Android Developer Site ,我们可以找到以下源代码。

android.hardware.Camera.CameraInfo info =
            new android.hardware.Camera.CameraInfo();
    android.hardware.Camera.getCameraInfo(cameraId, info);
    int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
    int degrees = 0 ;
    switch ( rotation ) {
        case Surface.ROTATION_0 : degrees = 0 ; break ;
        case Surface.ROTATION_90 : degrees = 90 ; break ;
        case Surface.ROTATION_180 : degrees = 180 ; break ;
        case Surface.ROTATION_270 : degrees = 270 ; break ;
    }
    int result ;
    if ( info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
        result = ( info.orientation + degrees ) % 360 ;
         result = ( 360 - result ) % 360 ;   // compensate the mirror
    } else {   // back-facing

        result = ( info.orientation - degrees + 360 ) % 360 ;

    }

但是,我不能使用某种设备。像三星 Galaxy Y S5360、S5660、YP-G1、YP-G70 等

只是机器的一部分不工作,Galaxy Nexus、SII 或一些高端设备,它工作正常。

setDisplayOrientation 不支持,或者设备固件没有准备好?

PS。所有设备均为 Android 2.3.1 或更高版本。

帮助。

4

2 回答 2

3

设置相机方向显示的问题不适用于这些设备的操作系统版本,基本上是(姜饼),但对于上面的设备,它可以正常工作。

我在这些设备上也试过这个,横向模式工作正常,但纵向模式有问题。如果要强制纵向,只需通过此方法将相机方向强制为 90 度

public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {

camera.setDisplayOrientation(90);


}

以及在显示或保存图片之前发布旋转图片

    PictureCallback myPictureCallback_JPG = new PictureCallback(){


     public void onPictureTaken(byte[] arg0, Camera arg1) {

    Bitmap bitmapPicture= BitmapFactory.decodeByteArray(arg0, 0, arg0.length);
      Matrix matrix = new Matrix();
     matrix.postRotate(90);
     int height=bitmapPicture.getHeight();
     int width=bitmapPicture.getWidth();
     Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmapPicture,height,width, true);
      Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap , 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true);
}

希望这可以帮助

于 2013-02-21T06:30:27.687 回答
-3

尝试将相机视图的 xml 的方向设置为横向。

于 2012-10-05T12:25:29.610 回答