Если вы работаете с 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 пикселей). Вот как мне нужно, чтобы эта функция работала, но вы можете легко изменить ее в противном случае.