Así que está la respuesta corta y la respuesta larga.
La respuesta corta es que la rotación de bitmaps y lienzos es una función común, generalmente llamada "rotar" y que generalmente toma el punto alrededor del cual girar.
La respuesta más larga es que todos los gráficos en 2D y 3D se convierten en un truco de álgebra matricial. Para cada punto: nueva_matriz_x = factor_1 * + old_x factor_2 * + old_y factor_3 ...
Estos factores funcionan muy bien en una matriz, y es por eso que la cosa matriz se puso tan popular. Hay un buen truco en el que encadenas las transformaciones, por lo que puedes plantear tus problemas como "tomar el lienzo viejo, moverlo para que el punto tocado sea el origen, rotarlo y luego moverlo para que el origen vuelva a estar en cero". el punto tocado ". O Matrix m = new Matrix(). PostTranslate (-touch_x, -touch_y) .postRotate (360/20) .postTranslate (touch_x, touch_y) para rotarlo en 1/20 de círculo cada vez. Luego pasas la matriz a cualquier función que tome la matriz de "transformación".
Lo bueno es que haces todos los cálculos para esa matriz solo una vez, y luego usas las mismas 4 multiplicaciones en cada punto y un montón de suma. De hecho, esto es tan común que las tarjetas de video y el conjunto de instrucciones de Intel hacen ambas cosas en hardware. También puede simplemente multiplicar la imagen resultante nuevamente por la misma matriz para obtener la siguiente.
Ahora, si realmente está pidiendo el truco gráfico de cómo hago esto en un código de ensamblaje increíblemente rápido sin memoria, el truco consiste en recoger rotaciones y errores en pequeñas cadenas donde no necesita un buffer .Por ejemplo, una simple rotación de 90 grados intercambiaría primero las cuatro esquinas, luego cambiaría (arriba a la izquierda + 1 a la izquierda arriba a la derecha + 1 abajo, que va a la esquina inferior derecha - 1 a la izquierda abajo a la izquierda - 1 abajo, vuelve a la esquina superior izquierda + 1). Estos trucos generalmente solo importan para las limitaciones de memoria.
Demasiada información. Cuéntanos más sobre tu problema.
Utilice matrices para aplicar la rotación. –
Duplicado exacto de http://stackoverflow.com/questions/4166917/android-how-to-rotate-a-bitmap-on-a-center-point – Ronnie
te aconsejo al usuario @Emiam answer, esto no usará la CPU como lo hace Matrix. –