如何使用负值旋转图像

时间:2011-02-16 16:32:24

标签: .net rotation

我在服务器端使用以下代码来旋转我的图像,它适用于像5,10,20..360这样的角度。在同一个项目中,我必须从Java应用程序中旋转角度已经保存在数据库中的图像。它包含-1,-1.23,1.4543545等值,并且不能用我的下面的函数旋转。

更新/工作代码

 public static Bitmap rotateCenter(string imagepath,Bitmap bmpSrc, float theta)
{
    Unit Width = 0;
    Unit Height = 0;

    if (imagepath.Contains("Images\\streets"))
    {
       if (imagepath.Contains("streets\\circle-4-way.png") || imagepath.Contains("streets\\circle_street.png"))
        {
            Width = Unit.Pixel(220);
            Height = Unit.Pixel(220);
            theta = theta + 10;
        }
     }
    else
    {
        Width = Unit.Pixel(50);
        Height = Unit.Pixel(30);

    }
    Double newdeg = theta * (180.0 / Math.PI);
    theta = (float)newdeg;

    Matrix mRotate = new Matrix();
    mRotate.Translate(Convert.ToInt32(Width.Value) / -2, Convert.ToInt32(Height.Value) / -2, MatrixOrder.Append);
    mRotate.RotateAt(theta, new Point(0, 0), MatrixOrder.Append);

    using (GraphicsPath gp = new GraphicsPath())
    {  // transform image points by rotation matrix
        gp.AddPolygon(new Point[] { new Point(0, 0), new Point(Convert.ToInt32(Width.Value), 0), new Point(0, Convert.ToInt32(Height.Value)) });
        gp.Transform(mRotate);
        PointF[] pts = gp.PathPoints;

        // create destination bitmap sized to contain rotated source image
        Rectangle bbox = boundingBox(bmpSrc, mRotate);
        Bitmap bmpDest = new Bitmap(bbox.Width, bbox.Height);


        using (Graphics gDest = Graphics.FromImage(bmpDest))
        {  // draw source into dest


            Matrix mDest = new Matrix();
            mDest.Translate(bmpDest.Width / 2, bmpDest.Height / 2, MatrixOrder.Append);
            gDest.Transform = mDest;
            gDest.DrawImage(bmpSrc, pts);
            gDest.DrawRectangle(Pens.Transparent, bbox);
            //drawAxes(gDest, Color.Red, 0, 0, 1, 100, "");
            return bmpDest;
        }
    }
}

1 个答案:

答案 0 :(得分:3)

看起来负值是弧度。 首先转换为学位: DEGREES = RADIANS *(180 / pi);

然后在结果中添加360,这应该给你一个正角度。

将其提供给您的方法。