Domanda

Ho bisogno di essere in grado di ruotare un'immagine attorno a un dato punto in modo che ciò che mai parte dell'immagine viene visualizzata al centro del mio contenitore è il centro di rotazione.

Per calcolare i punti centrali, Attualmente sto solo prendendo l'inverso della traduzione applicata all'immagine:

Rotate.CenterX = Translate.X * -1;
Rotate.CenterY = Translate.Y * -1;

Tuttavia, il calcolo corrente sto usando non è sufficiente in quanto non funziona se l'immagine è stata tradotta dopo rotazione.

Sono sicuro che è una funzione ragionevolmente semplice trig, non riesco proprio a pensare di cosa si tratta!

Saluti

È stato utile?

Soluzione

Se si sta lavorando con GDI + quindi utilizzare il seguente:

double ImWidth = (double)Im.Width;
double ImHeight = (double)Im.Height;
double XTrans = -(ImWidth * X);
double YTrans = -(ImHeight * Y);

g.TranslateTransform((float)XTrans, (float)YTrans);    
g.TranslateTransform((float)(ImWidth / 2.0 - XTrans), (float)(ImHeight / 2.0 - YTrans));
g.RotateTransform((float)Angle);
g.TranslateTransform(-((float)(ImWidth / 2.0 - XTrans)), -((float)(ImHeight / 2.0 - YTrans)));

Se si lavora con oggetti grafici WPF, utilizzare la seguente trasformazione gruppo:

TransformGroup TC = new TransformGroup();
RotateTransform RT = new RotateTransform(Angle);
RT.CenterX = Im.Width / 2.0;
RT.CenterY = Im.Height / 2.0;
TranslateTransform TT = new TranslateTransform(-X * Im.PixelWidth, -Y * Im.PixelHeight);
TC.Children.Add(TT);
TC.Children.Add(RT);

X & Y sono i valori percentuali da tradurre l'immagine (se l'immagine è di 1000 pixel e X è 0,1 quindi l'immagine sarà tradotto 100 pixel). Questo è come mi serviva la funzione di lavorare, ma si può facilmente cambiare altrimenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top