Feedback

Bild rotieren mit C#

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

6 Kommentare

  1. 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]

  2. Das kann doch die Bitmap Klasse auch schon von Haus aus.
    Beispiel:
    [code]Bitmap btmp1 = new Bitmap();
    btmp1.RotateFlip(RotateFlipType.Rotate180FlipX);[/code]

  3. 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.

  4. @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

  5. @Raffi:
    Vielen Dank, dass du dich mit dem Thema auseinandergesetzt hast!
    Sehr interessant, wie ich finde 🙂