Camera API捕获图像自动保存在横向中

时间:2013-12-30 18:05:26

标签: android bitmap camera rotation scale

我正在使用吹哨工作相机API,并将相机翻转到后面/前面。 Fliping the Front Camera to Back Camera in Button Click using android

默认情况下,在三星设备中,它会以横向方式打开相机预览,但

camera.setDisplayOrientation(90);

通过此代码我能够以纵向打开相机预览。但是当我保存图像时,它会自动将其保存为横向。

使用此approch

Matrix matrix = new Matrix();
    matrix.postRotate(90);
    Bitmap bitmap = BitmapFactory.decodeFile(pictureFile.getAbsolutePath());
    Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0,
            bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    Bitmap scaledBitmap = Bitmap.createScaledBitmap(rotatedBitmap,
            curntViewWidth, curntViewHeight, true);

处理速度变慢。任何人都可以通过其他方式预览,捕捉和保存图像方向相同..

我们是否有任何图书馆可以打开相机并设置特定尺寸的图片,例如此应用 https://play.google.com/store/apps/details?id=com.tinypiece.android.mlc

1 个答案:

答案 0 :(得分:1)

来自Camera.Parameters#setRotation()的文档:

  

如果应用程序想要旋转图片以匹配方向   用户看到的内容,应该使用OrientationEventListener和   Camera.CameraInfo

 public void onOrientationChanged(int orientation) {
     if (orientation == ORIENTATION_UNKNOWN) return;
     android.hardware.Camera.CameraInfo info =
            new android.hardware.Camera.CameraInfo();
     android.hardware.Camera.getCameraInfo(cameraId, info);
     orientation = (orientation + 45) / 90 * 90;
     int rotation = 0;
     if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
         rotation = (info.orientation - orientation + 360) % 360;
     } else {  // back-facing camera
         rotation = (info.orientation + orientation) % 360;
     }
     mParameters.setRotation(rotation);
 }

OrientationEventListener是一个包含onOrientationChanged()的抽象类。此方法将从系统接收方向更改。这是一种可能的实现方式:

    OrientationEventListener listener = new OrientationEventListener(this,
            SensorManager.SENSOR_DELAY_NORMAL) {

        @Override
        public void onOrientationChanged(int i) {
           //Code from above goes here.
        }
    };
    listener.enable();