AdSense

Montag, 20. Mai 2013

C# Windows Forms - Image drehen

(English version) Für Panzerkampf ist es nötig, ein Bild zu drehen (z.B. für den Flammpanzer). Die Lösung, die ich benutze ist folgende:

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


Zu beachten ist, dass ich das Bild vergrößere (Faktor 2), da sonst das gedrehte Bild an manchen Kanten abgeschnitten sein kann. Zeichnet man dann das neue Bild und will die Mitte an den selben Punkt wie bei dem ungedrehten Bild setzen, so muss man natürlich den doppelten Offset benutzen.

Keine Kommentare:

Kommentar veröffentlichen