studio programacion herramientas fundamentos con avanzado aplicaciones android bitmap

programacion - manual de android en pdf



La forma más rápida de rotar un mapa de bits de gran tamaño (1)

Cuando realice modificaciones en una imagen grande, cree una copia de mapa de bits de baja calidad y utilícela para mostrar la rotación instantánea u otros efectos de edición. Una vez que el usuario se detiene el movimiento (o el control deslizante izquierdo), reemplace el mapa de bits de baja calidad con la imagen original con los mismos efectos aplicados. Esto mejorará significativamente la experiencia del usuario. Prueba y avísame.

Esto puede sonar como una desviación del requisito original: puede dibujar un rectángulo en lugar de girar toda la imagen en tiempo real. Al final, lo que el usuario necesita es una indicación de cuánto ha girado su imagen. Esto será más rápido y se puede hacer fácilmente en el hilo de UI sin retraso.

Esta es la rotación más simple en el código de lienzo

canvas.save(); //save the position of the canvas canvas.rotate(angle, X + (imageW / 2), Y + (imageH / 2)); //rotate the canvas canvas.drawBitmap(imageBmp, X, Y, null); //draw the image on the rotated canvas canvas.restore(); // restore the canvas position.

Estoy trabajando con imágenes de gran tamaño y cuando intento rotarlas (applying matrix on the bitmap) ocurren muchos segundos. He visto que la galería del sistema Android puede realizar esta tarea de una manera muy rápida. ¿Como es posible?

Pensé realizar la rotación en un asyncTask, aplicando solo la rotación de ImageView (que no lleva mucho tiempo) en el hilo principal, pero si la aplicación se elimina antes de que asyncTask llegue al final, la aplicación cae en un estado incoherente .

Este es mi código de rotación de mapa de bits, que lleva mucho tiempo la ejecución de grandes mapas de bits:

Matrix mat = new Matrix(); mat.setRotate(90); bMap = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(), bMap.getHeight(), mat, true);