2012-08-09 16 views
5

Ho letto molti post lì? Ma non trovo la risposta corretta.Come ruotare l'immagine da "onPictureTaken" senza memoria esaurita Eccezione?

provo fare qualcosa di questo:

@Override 
public void onPictureTaken(byte[] paramArrayOfByte, Camera paramCamera) { 
    try { 


     Bitmap bitmap = BitmapFactory.decodeByteArray(paramArrayOfByte, 0, 
     paramArrayOfByte.length); 

     int width = bitmap.getWidth(); 
     int height = bitmap.getHeight(); 

     FileOutputStream os = new ileOutputStream(Singleton.mPushFilePath); 

     Matrix matrix = new Matrix(); 
     matrix.postRotate(90); 
     Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, 
      height, matrix, false); 

     resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 95, os); 
     os.close(); 
     ... 

Esiste un modo per ruotare la foto, senza l'utilizzo di BitmapFactory? Voglio ruotare l'immagine senza perdita di qualità!

+0

qui c'è una buona soluzione: http: //stackoverflow.com/questions/2225363/c-sharp-rotate-bitmap-90-degrees – paul

+0

E 'stato bello, ma è C#? –

+0

scusa - non ho letto i tag! – paul

risposta

4

Forse è possibile scattare la foto già ruotata come si desidera utilizzando Camera.setDisplayOrientation? Controllare Android camera rotate. Inoltre, investigare su Camera.Parameters.setRotation(). Una di queste tecniche dovrebbe fare il trucco per te.

In caso contrario, il codice sembra buono tranne che per l'utilizzo del parametro 95 su Bitmap.compress, è necessario utilizzare 100 per la compressione senza perdita di dati.

Per evitare un'eccezione di memoria esaurita, utilizzare Camera.Parameters.setPictureSize() per scattare una foto con una risoluzione inferiore (ad esempio 3Mpx). cioè hai davvero bisogno di una foto 8Mpx? Assicurati di utilizzare Camera.Parameters.getSupportedPictureSizes() per determinare le dimensioni supportate sul tuo dispositivo.

+5

Sfortunatamente, 'setDisplayOrientaion()' si applica solo all'anteprima e non ha effetto sul buffer catturato in 'onPicturetaken()'. Per una soluzione reale, vedere http://stackoverflow.com/a/18447809/192373 –

+2

setRotation fa proprio questo - ruota l'immagine reale che si riceve in onPictureTaken. – slott

Problemi correlati