【问题标题】:Android, front and back camera Orientation , LandscapeAndroid,前后摄像头方向,横向
【发布时间】:2012-01-10 01:33:19
【问题描述】:

在我的相机应用中,您可以在前后摄像头之间切换。 当我用后置摄像头拍照时,图片与预览显示的一样。 但是当我切换到前置摄像头时,图片是mirrorrd。我认为前后摄像头处于横向模式有关系。 我已经尝试了几乎所有关于 SO 的答案。

如果有人能指出我正确的方向,那真的很有帮助。

【问题讨论】:

    标签: java android camera landscape


    【解决方案1】:

    发现前置摄像头的问题是 android 4.0+ 所特有的。 所以在你解码了方法“onPictureTaken”中的字节数组之后

        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
    
        Bitmap photo = BitmapFactory.decodeByteArray(data,0,data.length);
        photo = rotateBitmap(photo);  //.....do some stuff     }
    

    只需调用 rotateBitmap 即可旋转位图

        private Bitmap rotateBitmap(Bitmap bitmap){
    
        Matrix rotateRight = new Matrix();
        rotateRight.preRotate(90);
    
        if(android.os.Build.VERSION.SDK_INT > 13 && CameraActivity.frontCamera)
        {
            float[] mirrorY = { -1, 0, 0, 0, 1, 0, 0, 0, 1};
            rotateRight = new Matrix();
            Matrix matrixMirrorY = new Matrix();
            matrixMirrorY.setValues(mirrorY);
    
            rotateRight.postConcat(matrixMirrorY);
    
            rotateRight.preRotate(270);
        }
    
        final Bitmap rImg= Bitmap.createBitmap(bitmap, 0, 0,
                bitmap.getWidth(), bitmap.getHeight(), rotateRight, true);
        return rImg;
    }
    

    【讨论】:

    • 您的答案与已经提供的已接受答案有何不同?
    • 这对于初学者来说更具可读性和可理解性。这就是为什么我添加了这个完整的答案。在上面的答案中没有明确说明在哪里执行此操作。除此之外,上面的答案还缺少方法“preRotate()”。
    【解决方案2】:

    我找到了答案,做mCamera.setDisplayOrientationa(int degrees); 没有帮助。我必须镜像生成的位图才能得到我想要的结果。我使用 Matrix 方法来实现这一点。

    float[] mirrorY = { -1, 0, 0, 0, 1, 0, 0, 0, 1};
    Matrix matrix = new Matrix();
    Matrix matrixMirrorY = new Matrix();
    matrixMirrorY.setValues(mirrorY);
    
    matrix.postConcat(matrixMirrorY);
    
    image = Bitmap.createBitmap(mBitmap, 0, 0, frame.getWidth(), frame.getHeight(), matrix, true)
    

    【讨论】:

    • 没问题 ;),很高兴我能帮上忙
    • @MaikelBollemeijer 真的很有帮助。谢谢
    • 有趣的是,我不得不绕 z 轴旋转。如果有人知道如何使用 camera2 API 执行此操作,请回答。
    • @RushiMThakker 对不起,m8,bin 离开 Android 开发领域有一段时间了。
    • @MaikelBollemeijer np m8,我解决了。你的回答很有帮助。谢谢。
    【解决方案3】:

    我认为您正在寻找 setDisplayOrientation(int)。他们有一个功能可能对开发网站有所帮助:

    http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation%28int%29

    【讨论】:

      猜你喜欢
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      相关资源
      最近更新 更多