3

我正在尝试使用 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#将位图旋转90度

4

3 回答 3

1

如果位图的宽度大于高度,则将其旋转 90 度时将进行裁剪。打电话时需要考虑到这一点g.TranslateTranform

于 2013-03-13T14:42:28.270 回答
0

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

如何使用 Graphics.RotateTransform 旋转 JPEG 而无需剪辑

应该很容易转换为 C#

于 2014-04-24T22:24:01.013 回答
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;
    }
于 2019-09-26T20:10:14.013 回答