2012-08-09 15 views
5

¿He leído muchos mensajes allí? Pero no encuentro la respuesta correcta.Cómo rotar la imagen desde "onPictureTaken" sin falta de memoria ¿Excepción?

Intento hacer algo esto:

@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(); 
     ... 

¿Hay una manera de girar la imagen, sin necesidad de utilizar BitmapFactory? ¡Quiero rotar la imagen sin pérdida de calidad!

+0

hay una buena solución aquí: http: //stackoverflow.com/questions/2225363/c-sharp-rotate-bitmap-90-degrees – paul

+0

Fue genial, pero ¿C#? –

+0

lo siento, ¡no leí las etiquetas! – paul

Respuesta

4

Tal vez pueda tomar la fotografía ya rotada como desee usando Camera.setDisplayOrientation? Compruebe Android camera rotate. Además, investigue Camera.Parameters.setRotation(). Una de estas técnicas debería ser el truco para ti.

De lo contrario, su código se ve bien a excepción de usar el parámetro 95 en Bitmap.compress, necesita usar 100 para la compresión sin pérdida.

Para evitar la excepción de falta de memoria, use Camera.Parameters.setPictureSize() para tomar una imagen de menor resolución (por ejemplo, 3Mpx). es decir, ¿realmente necesitas una foto de 8Mpx? Asegúrese de usar Camera.Parameters.getSupportedPictureSizes() para determinar los tamaños admitidos en su dispositivo.

+5

Desafortunadamente, 'setDisplayOrientaion()' solo se aplica a la vista previa y no afecta al búfer capturado en 'onPicturetaken()'. Para obtener una solución real, consulte http://stackoverflow.com/a/18447809/192373 –

+2

setRotation hace precisamente eso: rota la imagen real que recibe en el archivo de imagen. – slott

Cuestiones relacionadas