用C#旋转图片可以剪切图片

时间:2013-03-13 14:33:13

标签: c# .net image

我正在尝试使用C#旋转图片,并使用此代码:

///create a new empty bitmap to hold rotated image
Bitmap returnBitmap = new Bitmap(newBMP.Width, newBMP.Height);
//make a graphics object from the empty bitmap
Graphics g = Graphics.FromImage(returnBitmap);
//move rotation point to center of image
g.TranslateTransform((float)newBMP.Width / 2, (float)newBMP.Height / 2);
//rotate
g.RotateTransform(-90);
//move image back
g.TranslateTransform(-(float)newBMP.Width / 2, -(float)newBMP.Height / 2);
//draw passed in image onto graphics object
g.DrawImage(newBMP, new Point(0, 0)); 

newBMP是我从表单获取的位图,我正在改变它的大小。然后我想旋转它,但是当我尝试上面的代码时,它会切割图片的顶部和底部。 完成所有这些后,我将新图片保存在服务器上。

一切正常,除了旋转......

有人看到问题吗?

已解决我使用了这个:C# rotate bitmap 90 degrees

3 个答案:

答案 0 :(得分:1)

如果位图比它高,你将在旋转90度时进行裁剪。致电g.TranslateTranform时,您需要考虑到这一点。

答案 1 :(得分:0)

这个答案刚刚回答(对于任何角度)vb.net堆栈溢出......

How to rotate JPEG using Graphics.RotateTransform without clipping

应该很容易转换为C#

答案 2 :(得分:0)

 public static Bitmap RotateImage(Bitmap image, float angle)
    {
        //create a new empty bitmap to hold rotated image

        double radius = Math.Sqrt(Math.Pow(image.Width, 2) + Math.Pow(image.Height, 2));

        Bitmap returnBitmap = new Bitmap((int)radius, (int)radius);

        //make a graphics object from the empty bitmap
        using (Graphics graphic = Graphics.FromImage(returnBitmap))
        {
            //move rotation point to center of image
            graphic.TranslateTransform((float)radius / 2, (float)radius / 2);
            //rotate
            graphic.RotateTransform(angle);
            //move image back
            graphic.TranslateTransform(-(float)image.Width / 2, -(float)image.Height / 2);
            //draw passed in image onto graphics object
            graphic.DrawImage(image, new Point(0, 0));
        }
        return returnBitmap;
    }