Может ли кто-нибудь предложить мне образец в gdi + для рисования изображения на холсте? - PullRequest
1 голос
/ 13 апреля 2009

Мне нужно нарисовать изображение с определенным углом на холсте, его нужно повернуть на угол 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);

Но я обнаружил, что изображение вращается в верхнем левом углу, мне нужно, чтобы изображение вращалось в центре. Как я могу это сделать? большое спасибо!

1 Ответ

2 голосов
/ 13 апреля 2009

Вам необходимо изменить «центр» вращения, который по умолчанию находится вверху слева.
Вот код, который я нашел в сети:

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;
}
...