2011-02-16 2 views
0

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

ответ

3

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

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

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

+0

спасибо. Нижеследующие линии работали для меня Double newdeg = theta * (180.0/Math.PI); theta = (float) newdeg; – Vani

Смежные вопросы