2011-11-30 16 views
10

カメラアプリでは、前面と背面のカメラを切り替えることができます。 バックカメラで撮影すると、プレビューが表示されているのと同じ画像になります。 しかし、前のカメラに切り替えると、画像は鏡面になってしまいます。私はそれが前面と背面のカメラが風景モードになっていると思います。 私はSOのほぼすべての答えを試しました。Android、前後カメラ向き、風景

誰かが私を正しい方向に向けることができれば、本当に役に立ちます。

答えて

19

私はmCamera.setDisplayOrientationa(int degrees);が助けにはならなかったこと、答えを見つけた:彼らはDEVサイトに役立つかもしれない持っている機能があります。私は、私が望む結果を得るために、生成されたビットマップをミラーリングしなければならなかった。私はこれを達成するために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) 
+2

クールを回転させるrotateBitmapを呼び出して、答えを投稿していただきありがとうございます。 – 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  } 

だけビットマップ

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()"がありません。 –

関連する問題