2011-11-30 46 views
10

在我的相机应用程序中,您可以在正面和背面相机之间切换。 当我用后置照相机拍照时,照片与预览显示一样。 但是,当我切换到前置摄像头时,图片是mirrorrd.I认为它有一些事情要做,前置摄像头和后置摄像头处于横向模式。 我已经尝试了几乎所有给出的答案。Android,正面和背面相机定位,横向

如果有人能指引我走向正确的方向,那真的会有帮助。

回答

19

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

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) 
+2

酷,感谢您张贴的答案。 – craniumonempty

+2

没问题;),很高兴我能帮到 –

+0

@MaikelBollemeijer真的很有帮助。感谢 –

5

前置摄像头的问题被认为是特定于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; 
} 
+0

你的答案与已经接受的答案有什么不同? –

+1

这对初学者来说更具可读性和可理解性。这就是为什么我添加了这个完整的答案。在上面的答案中没有明确说明在哪里做这件事。除了上面的答案是缺少方法“preRotate()”。 –