Hay una manera para rotar la matriz de bytes sin decodificación a mapa de bits?

Actualmente en jpeg PictureCallback me acaba de escribir la matriz de bytes directamente a un archivo. Pero las fotos son rotados. Me gustaría hacerlos girar sin decodificación de mapa de bits con la esperanza de que esto ayudará a conservar mi memoria.

    BitmapFactory.Options o = new BitmapFactory.Options();
    o.inJustDecodeBounds = true;
    BitmapFactory.decodeByteArray(data, 0, data.length, o);

    int orientation;
    if (o.outHeight < o.outWidth) {
        orientation = 90;
    } else {
        orientation = 0;
    }

    File photo = new File(tmp, "demo.jpeg");

    FileOutputStream fos;
    BufferedOutputStream bos = null;
    try {
        fos = new FileOutputStream(photo);
        bos = new BufferedOutputStream(fos);
        bos.write(data);
        bos.flush();
    } catch (IOException e) {
        Log.e(TAG, "Failed to save photo", e);
    } finally {
        IOUtils.closeQuietly(bos);
    }
Hola. Se las arregló para hacer esto ? Gracias hombre.
Por desgracia, no.
consulte stackoverflow.com/a/16655188/192373
¿Cómo puede usted utilizar androidmediautil para resolver este problema?

OriginalEl autor Martynas Jurkus | 2013-05-20

3 Comentarios

  1. 2

    No creo que exista tal posibilidad. Bytes orden depende de la imagen de codificación (png, jpeg). Por lo que se ven obligados a decodificar la imagen para hacer algo con él.

    Pero Android estados de documentación que public final void takePicture (Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback jpeg). Así, en Camera.PictureCallback jpeg siempre voy a recibir de imagen JPEG de datos.
    Pero no hay ningún método para girar jpeg. Lo mejor que puede hacer es cambiar los datos Exif. No todo este apoyo y no ser cierto girar.

    OriginalEl autor Audrius K

  2. 3

    Puede establecer JPEG rotación a través de encabezado Exif sin decodificación. Este es el método más eficiente, pero algunas personas todavía pueden mostrar una imagen rotada.

    Como alternativa, puede utilizar JPEG lossless rotación. por Desgracia, no soy consciente de implementaciones libres de Java de este algoritmo.

    Actualización en SourceForge, no es una Java de código abierto de la clase LLJTran. El port para Android está en GitHub.

    ¿Has probado LLJtran para Android? Toma 16s para girar 2M archivo jpeg probado en el Samsung Galaxy S1. De todos modos, para acortar el tiempo de proceso?
    Oh, muy mal. Gracias por compartir. Voy a darle una mirada en el tiempo libre.
    Por favor tenga en una mirada en este a ver si he hecho algo mal con la biblioteca.
    Hay una forma más simple para girar y almacenar imágenes de tamaño completo de la matriz de bytes sin necesidad de convertir a mapa de bits @AlexCohn
    por desgracia, no parece ser uno de ellos. Como muchos comentaristas han notado, LLJTran no es hasta este reto con el presente-día típico de tamaños de imagen, memoria y CPU.

    OriginalEl autor Alex Cohn

  3. 1

    Probar esta. Se va a resolver el propósito.

    Bitmap storedBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, null);
    
    Matrix mat = new Matrix();                        
    mat.postRotate("angle");  //angle is the desired angle you wish to rotate            
    storedBitmap = Bitmap.createBitmap(storedBitmap, 0, 0, storedBitmap.getWidth(), storedBitmap.getHeight(), mat, true);
    Por favor, lea la pregunta – tengo que girar matriz de bytes sin decodificación a mapa de bits.
    menciona claramente que la rotación debe ser hecho sin decodificación.

    OriginalEl autor user2453055

Dejar respuesta

Please enter your comment!
Please enter your name here