Quindi c'è la risposta breve e la risposta lunga.
La risposta breve è che la rotazione di bitmap e canvass è una funzione comune, di solito chiamata "rotazione" e di solito prende il punto attorno al quale ruotare.
La risposta più lunga è che tutte le immagini 2D e 3D si trasformano in un trucco di algebra matriciale. Per ogni punto: new_x = factor_1 * old_x + factor_2 * old_y + factor_3 ...
Questi fattori funzionano davvero bene in una matrice, ed è il motivo per cui la cosa matrice ottenuto così popolare. C'è un bel trucco in cui si concatenano le trasformazioni insieme, in modo da poter dichiarare i propri problemi come "prendere la vecchia tela, spostarla in modo che il punto toccato sia l'origine, ruotarla e quindi spostarla in modo che l'origine ritorni a il punto toccato. " Oppure Matrix m = new Matrix(). PostTranslate (-touch_x, -touch_y) .postRotate (360/20) .postTranslate (touch_x, touch_y) per ruotarlo di 1/20 di cerchio ogni volta. Quindi si passa la matrice a qualsiasi funzione che utilizza la matrice di "trasformazione".
La cosa interessante è che si fanno tutti i calcoli per quella matrice solo una volta, e quindi si usano le stesse 4 moltiplicazioni su ogni punto e un mucchio di aggiunte. In effetti, questo è così comune che le schede video e le istruzioni Intel impostano entrambe queste cose nell'hardware. Puoi anche solo moltiplicare l'immagine risultante di nuovo dalla stessa matrice per ottenere quella successiva.
Ora, se si sta davvero chiedendo l'hack grafico di come faccio questo in un codice di assemblaggio follemente veloce senza memoria, il trucco è quello di raccogliere rotazioni ed errori in piccole catene dove non è necessario un buffer .Ad esempio, una semplice rotazione di 90 gradi prima scambierà i quattro angoli, poi cambierebbe (in alto a sinistra + 1 a sinistra va in alto a destra + 1 in basso che va in basso a destra - 1 a sinistra che va in basso a sinistra - 1 in basso, che torna in alto a sinistra + 1). Questi trucchi solitamente interessano solo i vincoli di memoria.
Via troppe informazioni. Dicci di più sul tuo problema.
fonte
2011-10-05 07:02:51
Utilizzare le matrici per applicare la rotazione. –
Exact duplicate di http://stackoverflow.com/questions/4166917/android-how-to-rotate-a-bitmap-on-a-center-point – Ronnie
ti consiglio all'utente @Emiam risposta, questo non utilizzerà la CPU come fa Matrix. –