2012-01-14 13 views
12

Sto scattando una foto nel mio dispositivo Samsung Galaxy SII dal codice. Dopo averlo salvato e visualizzato sullo schermo, vedo che è ruotato di 90 gradi.Android ruota le immagini di 90 gradi (ripresa dalla fotocamera)

Ho capito che si tratta di un problema del dispositivo, non si verifica su tutti i dispositivi.

Sto scattando l'immagine utilizzando l'intento della telecamera e salvandola nella funzione onActivityResult.

Mi sono guardato intorno ma non ho trovato una soluzione solida per questo.

Qualche idea su come trovare il problema e ruotarlo di nuovo solo su dispositivi "problematici"?

risposta

8

Questo è un bug basato su diverse impostazioni del produttore. Alcuni telefoni li ruotano, altri no. vedi il link, è questione # 1193

http://code.google.com/p/android/issues/detail?id=1193

+0

Quindi, per quanto posso vedere, devo richiedere la modalità orizzontale dalla fotocamera? C'è un modo per scoprire in qualche modo se il dispositivo su cui è in esecuzione l'applicazione lo sta ratificando? o dovrei fare in modo che tutti i dispositivi utilizzino la modalità orizzontale e blocchino il ritratto (che non è una soluzione piacevole) – user1136875

+1

Non ho capito da solo quella parte. Io personalmente provero 'http://developer.android.com/guide/topics/media/camera.html#custom-camera e vedere se questo fa la differenza. –

+0

Se lo capirete, fatemelo sapere :) – user1136875

-2

Immagino che potrebbe essere il problema del sensore di orientamento. Elabora il valore del sensore nel tuo programma .. per sapere quando l'utente ha scattato la foto il dispositivo era in orizzontale o verticale ..

+2

non può contare su di esso - dal momento che funziona bene su alcuni dispositivi e non su altri – user1136875

4

passare il percorso del file che viene catturato dalla macchina fotografica

public Bitmap rotateBitmapOrientation(String photoFilePath) { 

    // Create and configure BitmapFactory 
    BitmapFactory.Options bounds = new BitmapFactory.Options(); 
    bounds.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(file, bounds); 
    BitmapFactory.Options opts = new BitmapFactory.Options(); 
    Bitmap bm = BitmapFactory.decodeFile(file, opts); 
    // Read EXIF Data 
    ExifInterface exif = new ExifInterface(file); 
    String orientString = exif.getAttribute(ExifInterface.TAG_ORIENTATION); 
    int orientation = orientString != null ? Integer.parseInt(orientString) : ExifInterface.ORIENTATION_NORMAL; 
    int rotationAngle = 0; 
    if (orientation == ExifInterface.ORIENTATION_ROTATE_90) rotationAngle = 90; 
    if (orientation == ExifInterface.ORIENTATION_ROTATE_180) rotationAngle = 180; 
    if (orientation == ExifInterface.ORIENTATION_ROTATE_270) rotationAngle = 270; 
    // Rotate Bitmap 
    Matrix matrix = new Matrix(); 
    matrix.setRotate(rotationAngle, (float) bm.getWidth()/2, (float) bm.getHeight()/2); 
    Bitmap rotatedBitmap = Bitmap.createBitmap(bm, 0, 0, bounds.outWidth, bounds.outHeight, matrix, true); 
    // Return result 
    return rotatedBitmap; 
} 
Problemi correlati