techno
techno

Reputation: 6500

Rotating image clockwise and anticlock wise using Translate Transform in c#

I'm using the following code to rotate an image by an angle taking the center point as the origin.

private Bitmap rotateImage(Bitmap b, float angle)
{
       Bitmap returnBitmap = new Bitmap(b.Width, b.Height);
       Graphics g = Graphics.FromImage(returnBitmap);
       g.TranslateTransform((float)b.Width/2, (float)b.Height / 2);
       g.RotateTransform(angle);
       g.TranslateTransform(-(float)b.Width/2,-(float)b.Height / 2);
       g.DrawImage(b, new Point(0, 0));
       return returnBitmap;
} 

The Problem arises when i try to restore the image to its initial angle after a rotation is performed.I intend to do this by rotating the image again by angle of (360-anglerotated).But this is not working and the edges of the image seems to be cut. Is there a better solution to rotate image in c#.I just want to rotate the image to an angle without the abberation to the sides and then rotate the image at an counter angle to cancel the rotation applied,so the previous image is restored.

Upvotes: 3

Views: 4272

Answers (1)

Dan Byström
Dan Byström

Reputation: 9244

First of all, as has been said in the comments, you need to create a larger destination bitmap to accomodate for the rotated bitmap. This will get you the correct new size:

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

Then, as for restoring (rotating back) the bitmap, I would not reccomand that you try to do that. Try to keep the original bitmap around instead. It will be tricky to restore it and if you succeed, you will have lost image quality anyway.

Upvotes: 2

Related Questions