Benutzer mit den meisten Antworten
Zentirert Routieren

Frage
-
Hallo zusammen,
ich habe einen Code in meinen Büchern gefunden. Damit kann ich eine Graphik erstellen und diese dann im Kreis routieren lassen.
Soweit so gut. Aber das dinge dreht sich nicht im Kreis wie zum Beispiel eine Uhr. Also der Mittelpunkt soll gleich bleiben und das Bild soll sich um 360Grad im Kreis drehen. An diesem Beispiel kann ich probieren was ich will. Es geht einfach nicht.
Welchen Code muss ich denn nehemen ? Also so das sich ein Bild im Kreis dreht ohne den mittelpunkt zu verändern.
habe micht vertan. das war eine Beispiel hier aus msdn. ich glaube von Elmar oder Thorsten.
Public Class Form1 ' PictureBox1 Paint Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint Dim f As Font = New Font("Arial", 12, FontStyle.Bold Or FontStyle.Bold) e.Graphics.DrawString("DeinText", f, Brushes.Black, New Point(5, 5)) Dim m As New Drawing2D.Matrix m.RotateAt(-70, New PointF(CSng(f.Height / 1.1), 50)) e.Graphics.Transform = m e.Graphics.DrawString("DeinText", f, Brushes.Black, -50, 50) End Sub End Class
bernd
Antworten
-
Hallo Bernd,
unter GDI+ Graphics Transformation findest Du verschiedene Beispiele
zu den Möglichkeiten von GDI+. Der Code ist zwar C#, aber in den
meisten Fälle brauchst Du nur das ";" entfernen.
Listing 10.9 Rotating graphics objects zeigt eine einfache Rotation von beliebigen Objekten.
Das kann auch ein Bild sein, dass man mit Graphics.DrawImage zeichnet.
Schau Dir aber auch die anderen Seiten an.
Kleiner Codeschnippsel:
Private _angle As Single = 0.0F ' Wird durch Timer verändert... Private _image As Bitmap ' das Bildchen Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me._image = My.Resources.Falter Me._image.MakeTransparent(Color.Magenta) Me.Timer1 = New Timer() Me.Timer1.Interval = 500 Me.Timer1.Start() End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Me._angle += 2.0F If Me._angle >= 360.0F Then Me._angle = 0 End If Me.PictureBox1.Invalidate() End Sub Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) _ Handles PictureBox1.Paint Dim clientRectangle As Rectangle = DirectCast(sender, PictureBox).ClientRectangle Dim state As Drawing2D.GraphicsState = e.Graphics.Save() Using m As New System.Drawing.Drawing2D.Matrix() Dim center As New PointF(clientRectangle.Width / 2.0F, clientRectangle.Height / 2.0F) m.RotateAt(Me._angle, center, System.Drawing.Drawing2D.MatrixOrder.Append) m.Translate(0.5F, 0.5F) e.Graphics.Transform = m e.Graphics.DrawImage(Me._image, clientRectangle) e.Graphics.Restore(state) End Using End Sub
Gruß Elmar- Bearbeitet Elmar BoyeEditor Dienstag, 2. März 2010 09:42 Beispiel hinzugefügt
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Dienstag, 2. März 2010 10:37
- Als Antwort markiert Bernd Schlepütz Dienstag, 2. März 2010 16:56
Alle Antworten
-
Hallo Bernd,
unter GDI+ Graphics Transformation findest Du verschiedene Beispiele
zu den Möglichkeiten von GDI+. Der Code ist zwar C#, aber in den
meisten Fälle brauchst Du nur das ";" entfernen.
Listing 10.9 Rotating graphics objects zeigt eine einfache Rotation von beliebigen Objekten.
Das kann auch ein Bild sein, dass man mit Graphics.DrawImage zeichnet.
Schau Dir aber auch die anderen Seiten an.
Kleiner Codeschnippsel:
Private _angle As Single = 0.0F ' Wird durch Timer verändert... Private _image As Bitmap ' das Bildchen Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me._image = My.Resources.Falter Me._image.MakeTransparent(Color.Magenta) Me.Timer1 = New Timer() Me.Timer1.Interval = 500 Me.Timer1.Start() End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Me._angle += 2.0F If Me._angle >= 360.0F Then Me._angle = 0 End If Me.PictureBox1.Invalidate() End Sub Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) _ Handles PictureBox1.Paint Dim clientRectangle As Rectangle = DirectCast(sender, PictureBox).ClientRectangle Dim state As Drawing2D.GraphicsState = e.Graphics.Save() Using m As New System.Drawing.Drawing2D.Matrix() Dim center As New PointF(clientRectangle.Width / 2.0F, clientRectangle.Height / 2.0F) m.RotateAt(Me._angle, center, System.Drawing.Drawing2D.MatrixOrder.Append) m.Translate(0.5F, 0.5F) e.Graphics.Transform = m e.Graphics.DrawImage(Me._image, clientRectangle) e.Graphics.Restore(state) End Using End Sub
Gruß Elmar- Bearbeitet Elmar BoyeEditor Dienstag, 2. März 2010 09:42 Beispiel hinzugefügt
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Dienstag, 2. März 2010 10:37
- Als Antwort markiert Bernd Schlepütz Dienstag, 2. März 2010 16:56
-
Ok super,
nun habe ich einen ansatz und kann mich damit beschäftigen.
vielen lieben dank
bernd
habe es ausprobiert, genau so habe ich mir das vorgestellt. nun kann ich experimentieren und komme auch mit anderen übunfen weiter vorran.
nochmals lieben dank
bernd