2011-02-16 13 views
0

私は画像を回転させるために以下のコードをサーバー側で使用していますが、5,10,20,.360のような角度でうまく動作します。同じプロジェクトでは、角度がJavaアプリケーションからデータベースに既に保存されている画像を回転させる必要があります。それは-1、-1.23,1.4543545などの値を含み、私の下の関数では回転しません。負の値で画像を回転するには

UPDATED/WORKING CODE

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