Как повернуть изображение с отрицательными значениями - PullRequest
0 голосов
/ 16 февраля 2011

Я использую приведенный ниже код на стороне сервера для поворота моих изображений, он отлично работает для угла вроде 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 Ответ

3 голосов
/ 16 февраля 2011

Похоже, отрицательные значения в радианах.Сначала преобразуйте в градусы: DEGREES = RADIANS * (180 / pi);

Затем добавьте 360 к результату, который должен дать вам положительный угол.

Подайте это в ваш метод.*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...