2009-09-03 18 views
8

Jaki jest najlepszy sposób, aby obrócić obraz w asp.netC# Obrót obrazu

zrobiłem używać matrix.rotateAt ale nie mogę zmusić go do pracy, więc proszę mi powiedzieć, jaki jest najlepszy sposób?

Powinienem napisać, że nienawidzę obracać obraz z obiektem obrazu.

+0

obrót Matrix jest prawo sposób arbitralnej rotacji. Najlepszym sposobem jest pokazać, co próbujesz, więc możemy to naprawić ... – Guffa

Odpowiedz

7

Oto przykładowy kod (nie napisany przeze mnie - znaleziono jakiś czas temu here), który pracował dla mnie, tak długo, jak edytować kilka szczegółów.

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

Należy pamiętać, że to może nie działać "po wyjęciu z pudełka" - w nowej bitmapie występują pewne problemy. Po obróceniu go może on nie pasować wygodnie w prostokącie starej bitmapy (prostokąty b.Width, B.Height).

W każdym razie to tylko pomysł. Jeśli zdecydujesz się to zrobić w ten sposób, jestem pewien, że będziesz w stanie opracować wszystkie szczegóły. Chciałbym pisać mój ostateczny kod, jednak nie mam go na mnie teraz ...

+1

Powinieneś dodać instrukcję "using" do swojej grafiki. – MiffTheFox

+0

Masz całkowitą rację, dodamy go od razu. –

-1

Proponuję to jest najlepszym sposobem

// get the full path of image url 
    string path = Server.MapPath(Image1.ImageUrl) ; 

    // creating image from the image url 
    System.Drawing.Image i = System.Drawing.Image.FromFile(path); 

    // rotate Image 90' Degree 
    i.RotateFlip(RotateFlipType.Rotate90FlipXY); 

    // save it to its actual path 
    i.Save(path); 

    // release Image File 
    i.Dispose(); 

    // Set Image Control Attribute property to new image(but its old path) 
    Image1.Attributes.Add("ImageUrl", path); 

for more