我正在尝试使用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
答案 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;
}