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?
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
Ohh, vielen Dank. Jetzt habe ich es verstanden. Ich werde später hier eine vernünftige, fertige Lösung posten.
Hallo el_vital,
new Bitmap
herbivore
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.
Hallo el_vital,
DrawImageUnscaled?
herbivore
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;
damit gin es jetzt die Auflösung anzupassen:
tempBitmap.SetResolution(imgOriginal.HorizontalResolution, imgOriginal.HorizontalResolution);
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
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)));