Прежде всего, как уже было сказано в комментариях, вам нужно создать увеличенное целевое растровое изображение для размещения повернутого растрового изображения. Это даст вам правильный новый размер:
public Size SizeAfterRotation(Size sz, float angle)
{
var m = new Matrix();
m.Rotate(angle);
var pts = new[]
{
new Point(sz.Width, sz.Height),
new Point(sz.Width, 0)
};
m.TransformPoints(pts);
return new Size(
Math.Max(Math.Abs(pts[0].X), Math.Abs(pts[1].X)),
Math.Max(Math.Abs(pts[0].Y), Math.Abs(pts[1].Y)));
}
Тогда, что касается восстановления (вращения назад) растрового изображения, я бы не советовал вам делать это. Попробуйте вместо этого сохранить оригинальное растровое изображение. Восстановить его будет непросто, и если вам это удастся, вы все равно потеряете качество изображения.