Вопрос

Мне нужно быть в состоянии вращать изображение вокруг данной точки, чтобы какая -либо часть изображения появлялась в центре моего контейнера, была центром вращения.

Чтобы рассчитать центральные точки, в настоящее время я просто принимаю обратную пробку, применяемое к изображению:

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

Тем не менее, текущий расчет, который я использую, недостаточно, поскольку он не работает, если изображение было переведено после повернуто.

Я уверен, что это достаточно простая функция тригея, я просто не могу думать, что это такое!

Ваше здоровье

Это было полезно?

Решение

Если вы работаете с GDI+, используйте следующее:

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)));

Если вы работаете с графическими объектами WPF, используйте следующую группу преобразования:

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 - процентные значения, которые вы хотите перевести в изображение (если изображение составляет 1000 пикселей, а x - 0,1, то изображение будет переведено на 100 пикселей). Вот как мне нужно было работать функция, но вы можете легко изменить ее иначе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top