2011-11-30 5 views
10

Nella mia app fotocamera, è possibile passare dalla fotocamera anteriore a quella posteriore. Quando scatto la foto con la fotocamera posteriore, l'immagine è la stessa come mostra l'anteprima. Ma quando si passa alla fotocamera anteriore, l'immagine è speculare. Penso che abbia qualcosa da fare che la fotocamera anteriore e posteriore è in modalità orizzontale. Ho provato quasi tutte le risposte date su SO.Android, fotocamera anteriore e posteriore Orientamento, Paesaggio

Sarebbe davvero di grande aiuto se qualcuno potesse indicarmi le giuste direzioni.

risposta

19

ho trovato la risposta, facendo mCamera.setDisplayOrientationa(int degrees); non ha aiutato. Ho dovuto rispecchiare la bitmap generata per ottenere il risultato che volevo. Ho usato il metodo Matrix per raggiungere questo obiettivo.

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

Fresco, Grazie per l'invio della risposta. – craniumonempty

+2

Nessun problema;), felice di poter aiutare –

+0

@MaikelBollemeijer Davvero utile. Grazie –

5

Il problema con la fotocamera anteriore è stato risolto per essere specifico per Android 4.0+. Così dopo che decodificato il byte-array nel metodo "onPictureTaken"

@Override 
    public void onPictureTaken(byte[] data, Camera camera) { 

    Bitmap photo = BitmapFactory.decodeByteArray(data,0,data.length); 
    photo = rotateBitmap(photo); //.....do some stuff  } 

basta chiamare RotateBitmap per ruotare l'immagine bitmap

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

In che modo la tua risposta è diversa dalla risposta accettata già fornita? –

+1

Questo è molto più leggibile e comprensibile per i principianti. Questo è il motivo per cui ho aggiunto questa risposta completa. Nella risposta di cui sopra non è detto chiaramente dove farlo. Inoltre nella risposta sopra manca il metodo "preRotate()". –