Sprache: C#
Mit dieser Funktion lässt sich ein Bild rotieren. Zurückgeliefert wird ein Objekt vom Typ Bitmap mit der angewendeten Rotation.
public Bitmap rotateImage(Bitmap bitmap, float angle)
{
Bitmap returnBitmap = new Bitmap(bitmap.Width, bitmap.Height);
Graphics graphics = Graphics.FromImage(returnBitmap);
graphics.TranslateTransform((float)bitmap.Width / 2, (float)bitmap.Height / 2);
graphics.RotateTransform(angle);
graphics.TranslateTransform(-(float)bitmap.Width / 2, -(float)bitmap.Height / 2);
graphics.DrawImage(bitmap, new Point(0, 0));
return returnBitmap;
}
public Bitmap rotateImage(Bitmap bitmap, float angle)
{
Bitmap returnBitmap = new Bitmap(bitmap.Width, bitmap.Height);
Graphics graphics = Graphics.FromImage(returnBitmap);
graphics.TranslateTransform((float)bitmap.Width / 2, (float)bitmap.Height / 2);
graphics.RotateTransform(angle);
graphics.TranslateTransform(-(float)bitmap.Width / 2, -(float)bitmap.Height / 2);
graphics.DrawImage(bitmap, new Point(0, 0));
return returnBitmap;
}
Alte URL:
/snippet/bild-rotieren-mit-c/1552
Mein Vorschlag:
[code]
public Bitmap rotateImage(Bitmap bitmap, float angle)
{
using (Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.TranslateTransform((float)bitmap.Width / 2, (float)bitmap.Height / 2);
graphics.RotateTransform(angle);
graphics.TranslateTransform(-(float)bitmap.Width / 2, -(float)bitmap.Height / 2);
graphics.DrawImage(bitmap, new Point(0, 0));
}
return bitmap;
}
[/code]
Das kann doch die Bitmap Klasse auch schon von Haus aus.
Beispiel:
[code]Bitmap btmp1 = new Bitmap();
btmp1.RotateFlip(RotateFlipType.Rotate180FlipX);[/code]
Könnte mir vorstellen, dass meine Methode über die graphics methode schneller ist … müsste man mal ausprobieren
Das bezweifle ich stark, dass es über ein Graphics-Objekt schneller geht.
GDI+ ist relativ langsam und sollte für solche Aufgaben lieber nicht verwendet werden.
@Curry & @Kevin:
Ich habe mich mal mit dem Thema welche Variante schneller ist auseinandergesetzt.
http://code-bude.net/2011/07/12/bilder-rotieren-mit-csharp-bitmap-rotateflip-vs-gdi-graphics/
Was das ursprüngliche Snippet angeht, finde ich die Lösung mit
[code]Bitmap returnBitmap = new Bitmap(bitmap.Width, bitmap.Height); [/code]
eher ungünstig, da vor allem bei der Bearbeitung vieler Bilder schnell der Speicher an seine Grenzen stößt.
Viele Grüße,
Raffi
@Raffi:
Vielen Dank, dass du dich mit dem Thema auseinandergesetzt hast!
Sehr interessant, wie ich finde 🙂