Laden...

Image einer PictureBox um beliebigen Winkel drehen

Erstellt von el_vital vor 16 Jahren Letzter Beitrag vor 16 Jahren 9.136 Views
E
el_vital Themenstarter:in
346 Beiträge seit 2007
vor 16 Jahren
Image einer PictureBox um beliebigen Winkel drehen

Hallo,

ich versuche schon seit Stunden eine Funktion zu realisieren um das Image einer PictureBox um einen beliebigen Winkel zu drehen.
Die Theorie ist mir klar. Ich muss ein Graphics Objekt erzeugen und dem Objekt das Bild der PictureBux zuweisen.

System.Drawing.Graphics Graph = Graphics.FromImage(this.pictureBox.Image);

Dann mit folgendem Befehl drehen:

Graph.RotateTransform(30);

Aber wie verwandele ich den Graph wieder in ein Image und weise es der pictureBox zu?

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo el_vital,

erzeuge das Graphics-Objekt mit Graphics.FromImage für ein neues, leeres Bild. Nachdem RotateTransform musst du das alte Bild mit Graphics.DrawImage in das neue zeichnen. Dann weist du das neue Bild an pictureBox.Image zu.

herbivore

E
el_vital Themenstarter:in
346 Beiträge seit 2007
vor 16 Jahren

Ohh, vielen Dank. Jetzt habe ich es verstanden. Ich werde später hier eine vernünftige, fertige Lösung posten.

E
el_vital Themenstarter:in
346 Beiträge seit 2007
vor 16 Jahren

Eine Frage noch. Wie kann ich ein leerses Image (z.B. mit einem weißen Hintergrund) in einer bestimmten Größe erzeugen?
ich kann hier nichts passendes finden.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo el_vital,

new Bitmap

herbivore

E
el_vital Themenstarter:in
346 Beiträge seit 2007
vor 16 Jahren

Mit Bitmap habe ich es versucht. Wenn ich das Bitmap in der Größe des Images der PictureBox erstelle und das Bild dann in das Bitmap schreibe, dann ist das darin angezeigtes Bild sehr klein, als ob die Auflösung unterschiedlich ist. Muss ich da was extra anpassen? Ich poste gleich noch den Quellcode.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo el_vital,

DrawImageUnscaled?

herbivore

E
el_vital Themenstarter:in
346 Beiträge seit 2007
vor 16 Jahren

DrawImageUnscaled bringt leider auch keine besserung.
Hier der Quelltext:


grad -= 1;
Bitmap tempBitmap = new Bitmap(imgOriginal.Width, imgOriginal.Height);
System.Drawing.Graphics Graph = Graphics.FromImage(tempBitmap);
Matrix X = new Matrix();
X.RotateAt(grad, new Point((imgOriginal.Width / 2), (imgOriginal.Height / 2)));
Graph.Transform = X;
Graph.DrawImageUnscaled(imgOriginal, new Point(0, 0));
this.pictureBox.Image = tempBitmap;
E
el_vital Themenstarter:in
346 Beiträge seit 2007
vor 16 Jahren

damit gin es jetzt die Auflösung anzupassen:


 tempBitmap.SetResolution(imgOriginal.HorizontalResolution, imgOriginal.HorizontalResolution);
            
49.485 Beiträge seit 2005
vor 16 Jahren

Hallo el_vital,

also Problem gelöst? Ok, dann noch eine kleine Anmerkung. Du kannst

Graph.Transform.RotateAt(grad, new Point((imgOriginal.Width / 2), (imgOriginal.Height / 2)));

statt


Matrix X = new Matrix();
X.RotateAt(grad, new Point((imgOriginal.Width / 2), (imgOriginal.Height / 2)));
Graph.Transform = X;

schreiben.

herbivore

E
el_vital Themenstarter:in
346 Beiträge seit 2007
vor 16 Jahren

bei mir funktioniert es so einwandfrei:


  tempBitmap = new Bitmap((int)(imgOriginal.Width * 2), (int)(imgOriginal.Height * 2));
            tempBitmap.SetResolution(imgOriginal.HorizontalResolution, imgOriginal.HorizontalResolution);
            System.Drawing.Graphics Graph = Graphics.FromImage(tempBitmap);
            Matrix X = new Matrix();
            X.RotateAt(gradGesamt, new Point((imgOriginal.Width), (imgOriginal.Height)));
            Graph.Transform = X;
            Graph.DrawImageUnscaled(imgOriginal, new Point((imgOriginal.Width / 2), (imgOriginal.Height / 2)));
            this.pictureBox.Image = tempBitmap;
            img = tempBitmap;
            formGrafikG.pictureBoxGrossO.Image = img;
         
            X.Dispose();

Mit folgendem Befehl funktioniert es aus irgend einem Grund nicht:


Graph.Transform.RotateAt(gradGesamt, new Point((imgOriginal.Width / 2), (imgOriginal.Height / 2)));