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()」。 –