Bild Drehen

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Vincent fischer.

    Bild Drehen

    Hallo,
    Weis jemand, wie ich ein bild z.b. in einer Pb Drehen Kann.
    allerdings muss ich es beliebig drehen können(also nicht nur 90,180 grad).
    Deshalb kommt Rotateflip nicht in frage.
    Oder habe ich da was übersehen?

    MfG Vincent
    System.Drawing.Graphics.RotateTransform(angle As Single)
    Ich kriegs nicht hin.
    ich hab 3 pictureboxen jede in form einer raute:


    Alles was ich in die rote raute zeichne soll auch in die grüne und in die blaue gezeichnet werden
    nur entsprechend gedreht.
    mann mus für die blaue raute alles um die untere linke ecke der raute um 120 grad drehen
    für die grüne raute um den selben punkt aber um 250 grad.

    MfG Vincent
    wo ist das Problem ?
    Das Bild sollte so groß sein wie die Fläche die du gescreent hast und du zeichnest das Bild im roten bei 0,0 und dann drehst du das ganze um 120° in der Mitte dann zeichnest du nochmal und das ganze nochmal (120° drehen und zeichnen)
    welchen Punkt übergibst du wem und wo wird gedreht
    Also das ist doch wirklich einfach:
    ich zeichne in deie rote raute
    dann erstelle ich für die blaue un die grüne raute
    ein neues graphics object,
    leg den drehpunkt fest,
    dreh um einmal 120 und einmal um 240 grad.
    dann zeichne ich in beide rauten das selbe
    wie in die rote.
    nur dann kommt raus, dass der drehpunkt nicht da ist,wo ich ihn gesetzt habe.

    MfG Vincent

    VB.NET-Quellcode

    1. Private Sub Draw(ByVal g As Graphics)
    2. g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
    3. Dim g2 As Graphics = Graphics.FromImage(bm2)
    4. Dim g3 As Graphics = Graphics.FromImage(bm3)
    5. g3.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
    6. g2.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
    7. g.Clip = shapeedit(CInt(pbdraw.Width), CInt(pbdraw.Height))
    8. g2.Clip = shapeedit2(bm2.Width, bm2.Height)
    9. g3.Clip = shapeedit3(bm3.Width, bm3.Height)
    10. g2.TranslateTransform(pbdraw.Height / 2, pbdraw.Height)
    11. g2.RotateTransform(120)
    12. g3.TranslateTransform(pbdraw.Height / 2, pbdraw.Height)
    13. g3.RotateTransform(240)
    14. If Plist.Count > 0 Then
    15. Dim bs As Byte() = New Byte(Plist.Count - 1) {}
    16. bs(0) = CByte(System.Drawing.Drawing2D.PathPointType.Start)
    17. For a As Integer = 1 To Plist.Count - 1
    18. bs(a) = CByte(System.Drawing.Drawing2D.PathPointType.Line)
    19. g2.DrawPath(pen2, New System.Drawing.Drawing2D.GraphicsPath(Plist.ToArray, bs, Drawing2D.FillMode.Alternate))
    20. g3.DrawPath(pen3, New System.Drawing.Drawing2D.GraphicsPath(Plist.ToArray, bs, Drawing2D.FillMode.Alternate))
    21. g.DrawPath(NewPen, New System.Drawing.Drawing2D.GraphicsPath(Plist.ToArray, bs, Drawing2D.FillMode.Alternate))
    22. Next
    23. End If
    24. g2.TranslateTransform(-pbdraw.Height / 2, -pbdraw.Height)
    25. g3.TranslateTransform(-pbdraw.Height / 2, -pbdraw.Height)
    26. PictureBox1.Image = bm2
    27. PictureBox2.Image = bm3
    28. End Sub



    an den parameter g übergebe ich das graphicobject der roten raute
    plist ist eine liste von punkten.
    den kommpletten code zum malen findet ihr im sourcecode austausch,
    im thema "Mit stift in picturebox malen ohne wakler oder unterbrechungen" o.ä.

    MfG Vincent
    Beispiel: (Kannst einfach C&P machen)

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim WithEvents trc As New TrackBar With {.Maximum = 360, .Location = New Point(12, 12), .Width = 210}
    3. Private Sub Form1_Load() Handles Me.Load
    4. Me.Controls.Add(trc)
    5. Me.DoubleBuffered = True
    6. End Sub
    7. Private Sub trc_Scroll() Handles trc.Scroll
    8. Dim g As Graphics = Me.CreateGraphics
    9. Dim m As New Drawing2D.Matrix
    10. g.Clear(Me.BackColor)
    11. m.RotateAt(trc.Value, New Point(96, 96))
    12. g.Transform = m
    13. g.DrawImage(SystemIcons.Shield.ToBitmap, New Rectangle(New Point(64, 64), New Size(64, 64)))
    14. m.Dispose()
    15. g.Dispose()
    16. End Sub
    17. End Class
    Danke EiPott damit hab ich wenigstens die
    untere Raute hinbekommen.
    bei der linken raute muss dass bild alerdings noch verschoben
    werden.

    außerdem hab ich rausgefunden das
    mann um den mittelpunkt drehen muss.(???)
    MfG Vincent
    und ich dachte das wäre klar gewesen ^^'
    sorry, sonst hätt ichs vorher schon mal erwähnt