Pergunta

Eu preciso poder girar uma imagem em torno de um determinado ponto, para que qualquer parte da imagem apareça no centro do meu contêiner seja o centro de rotação.

Para calcular os pontos centrais, atualmente estou apenas tomando o inverso da tradução aplicada à imagem:

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

No entanto, o cálculo atual que estou usando não é suficiente, pois não funciona se a imagem foi traduzida depois sendo girado.

Tenho certeza de que é uma função TRIG razoavelmente direta, simplesmente não consigo pensar no que é!

Felicidades

Foi útil?

Solução

Se você estiver trabalhando com o GDI+, use o seguinte:

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 você estiver trabalhando com objetos gráficos WPF, use o seguinte grupo de transformação:

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 são os valores percentuais em que você deseja traduzir a imagem (se a imagem for de 1000 pixels e x for 0,1, a imagem será traduzida 100 pixels). É assim que eu precisava que a função funcione, mas você pode alterá -la facilmente de outra forma.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top