任何人都可以在gdi +中为我提供样本以在画布上绘制图像吗?

时间:2009-04-13 07:23:36

标签: gdi+ matrix rotation

我需要在画布上绘制一个具有一定角度的图像,它需要旋转角度N,其中心位于x,y

        Matrix myPathMatrix;
        myPathMatrix.Translate(x, y, MatrixOrderAppend);
        myPathMatrix.Rotate(angle, MatrixOrderAppend);
        canvas->SetTransform(&myPathMatrix);
        Draw(canvas);// draw the image
        myPathMatrix.Rotate(-angle, MatrixOrderAppend);
        myPathMatrix.Translate(-x, -y, MatrixOrderAppend);
        canvas->SetTransform(&myPathMatrix);

但我发现img在左上角旋转,我需要图像以其中心旋转。 我怎样才能做到这一点? 非常感谢!

1 个答案:

答案 0 :(得分:2)

您需要更改旋转“中心”,默认情况下左上角 这里有一些我在网上找到的代码:

private Bitmap rotateImage(Bitmap b, float angle)
{
  //create a new empty bitmap to hold rotated image
  Bitmap returnBitmap = new Bitmap(b.Width, b.Height);
  //make a graphics object from the empty bitmap
  Graphics g = Graphics.FromImage(returnBitmap);
  //move rotation point to center of image
  g.TranslateTransform((float)b.Width/2, (float)b.Height / 2);
  //rotate
  g.RotateTransform(angle);
  //move image back
  g.TranslateTransform(-(float)b.Width/2,-(float)b.Height / 2);
  //draw passed in image onto graphics object
  g.DrawImage(b, new Point(0, 0)); 
  return returnBitmap;
}