none
Rotate Picturebox to any angle RRS feed

  • Frage

  • Hoi Friends,

    i want to rotate a picturebox to any angle.
    I searched and found  Rotate, but this ony works in specified angles.

    Here is my code so far:

      Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        PictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipNone)
        PictureBox1.Refresh()
        Button1.Enabled = False
        Button2.Enabled = True
        Button3.Enabled = False
        Button4.Enabled = True
      End Sub

    How is it possible to set the angle i.e. to 100 degrees, or 135 or something else ?

    Also i like to make the movement slow, so that i can see the Picturebox.image (a knob) slowly move to the end position ?

    Doei
    Franz


    Be a good forum member - mark posts that contain the answers to your questions or those that are helpful
    Montag, 3. Januar 2011 14:34

Antworten

  • Hallo Franz,

    i want to rotate a picturebox to any angle.
    I searched and found  Rotate, but this ony works in specified angles.

    wir sprechen hier immer noch deutsch. Bitte zukünftig beachten.

    Zur Frage selbst siehe: http://dotnet-snippets.com/dns/image-rotation-by-angle-SID600.aspx

    (übrigens ein Link auf der ersten Ergebnisseite bei einer Suche nach System.Drawing.Image rotate)

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 3. Januar 2011 15:35
    Moderator
  • Hallo Franz,

    ein Beispiel, bei dem sich was via Timer dreht, hatte ich mal gegeben in: Zentirert Routieren

    Gedreht wird dort immer das Original, denn sonst wird es auf Dauer unschön.

    Gruß Elmar

    Montag, 3. Januar 2011 19:59
    Beantworter
  • Hallo Franz,

    so ganz werde ich aus dir nicht schlau. Die gleiche Frage hast du doch bereits im US/UK Forum gestellt. Dort habe ich dir folgenden Code gepostet:

    Imports System.Drawing.Drawing2D
    Imports System.Math
    
    Public Class Form1
    
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
      Dim bm_in As New Bitmap(My.Resources.Bild)
      '// Array von Punkten, die die Bild Ecken definieren
      Dim wid As Single = bm_in.Width
      Dim hgt As Single = bm_in.Height
      Dim corners As Point() = { _
       New Point(0, 0), _
       New Point(wid, 0), _
       New Point(0, hgt), _
       New Point(wid, hgt)}
    
      '//Translation
      Dim cx As Single = wid / 2
      Dim cy As Single = hgt / 2
      Dim i As Long
      For i = 0 To 3
       corners(i).X -= cx
       corners(i).Y -= cy
      Next i
    
      '//Drehen
      Dim theta As Single = Single.Parse(TextBox1.Text) * PI / 180.0 '//Beliebigen Winkel eingeben
      Dim sin_theta As Single = Sin(theta)
      Dim cos_theta As Single = Cos(theta)
      Dim X As Single
      Dim Y As Single
      For i = 0 To 3
       X = corners(i).X
       Y = corners(i).Y
       corners(i).X = X * cos_theta + Y * sin_theta
       corners(i).Y = -X * sin_theta + Y * cos_theta
      Next i
    
      '//Translate, so das X >= 0 und Y >=0 für alle Ecken 
      Dim xmin As Single = corners(0).X
      Dim ymin As Single = corners(0).Y
      For i = 1 To 3
       If xmin > corners(i).X Then xmin = corners(i).X
       If ymin > corners(i).Y Then ymin = corners(i).Y
      Next i
      For i = 0 To 3
       corners(i).X -= xmin
       corners(i).Y -= ymin
      Next i
    
      '//Output Bitmap als Graphisches Objekt 
      Dim bm_out As New Bitmap(CInt(-2 * xmin), CInt(-2 * ymin))
      Dim gr_out As Graphics = Graphics.FromImage(bm_out)
    
      ReDim Preserve corners(2)
    
      '//Resultat in das Output Bitmap speichern
      gr_out.DrawImage(bm_in, corners)
    
      '//Endresultat
      PictureBox1.Image = bm_out
    
    
     End Sub
    
    

    Ich bin mir nicht sicher, ob ich diesen Code seinezeit von Elmar oder Robert bekommen habe (denke von Elmar), der funktioniert doch super.


    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 Express
    Donnerstag, 6. Januar 2011 18:20
  • Freitag, 7. Januar 2011 03:25

Alle Antworten

  • Hallo Franz,

    i want to rotate a picturebox to any angle.
    I searched and found  Rotate, but this ony works in specified angles.

    wir sprechen hier immer noch deutsch. Bitte zukünftig beachten.

    Zur Frage selbst siehe: http://dotnet-snippets.com/dns/image-rotation-by-angle-SID600.aspx

    (übrigens ein Link auf der ersten Ergebnisseite bei einer Suche nach System.Drawing.Image rotate)

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 3. Januar 2011 15:35
    Moderator
  • Hoi Stefan,

    Yo, war im US-Forum aber habe dann gesehen, dass die Frage in DE gepostet wurde ?

    Der Suchbegriff war mir nicht bekannt, ich hatte nur nach Image rorate gesucht ;-)

    Dein Ergbnis ist in C#, ich suche bei VB.net (was ich brauche).

    Evtl. ein Cookie-Fehler nach dem Jahreswechsel ?

    Doei
    Franz

     


    Be a good forum member - mark posts that contain the answers to your questions or those that are helpful
    Montag, 3. Januar 2011 15:46
  • Hallo Trixi-N,

    Schau Dir mal den folgenden Link an. Vielleicht kann er Dir weiter helfen.

    How to rotate an image in Visual Basic.Net

    Man braucht ein bisschen Trigonometrie J

    Grüße,

    Robert

    Montag, 3. Januar 2011 15:57
    Moderator
  • Hallo Franz,

    ein Beispiel, bei dem sich was via Timer dreht, hatte ich mal gegeben in: Zentirert Routieren

    Gedreht wird dort immer das Original, denn sonst wird es auf Dauer unschön.

    Gruß Elmar

    Montag, 3. Januar 2011 19:59
    Beantworter
  • Hallo Franz,

    so ganz werde ich aus dir nicht schlau. Die gleiche Frage hast du doch bereits im US/UK Forum gestellt. Dort habe ich dir folgenden Code gepostet:

    Imports System.Drawing.Drawing2D
    Imports System.Math
    
    Public Class Form1
    
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
      Dim bm_in As New Bitmap(My.Resources.Bild)
      '// Array von Punkten, die die Bild Ecken definieren
      Dim wid As Single = bm_in.Width
      Dim hgt As Single = bm_in.Height
      Dim corners As Point() = { _
       New Point(0, 0), _
       New Point(wid, 0), _
       New Point(0, hgt), _
       New Point(wid, hgt)}
    
      '//Translation
      Dim cx As Single = wid / 2
      Dim cy As Single = hgt / 2
      Dim i As Long
      For i = 0 To 3
       corners(i).X -= cx
       corners(i).Y -= cy
      Next i
    
      '//Drehen
      Dim theta As Single = Single.Parse(TextBox1.Text) * PI / 180.0 '//Beliebigen Winkel eingeben
      Dim sin_theta As Single = Sin(theta)
      Dim cos_theta As Single = Cos(theta)
      Dim X As Single
      Dim Y As Single
      For i = 0 To 3
       X = corners(i).X
       Y = corners(i).Y
       corners(i).X = X * cos_theta + Y * sin_theta
       corners(i).Y = -X * sin_theta + Y * cos_theta
      Next i
    
      '//Translate, so das X >= 0 und Y >=0 für alle Ecken 
      Dim xmin As Single = corners(0).X
      Dim ymin As Single = corners(0).Y
      For i = 1 To 3
       If xmin > corners(i).X Then xmin = corners(i).X
       If ymin > corners(i).Y Then ymin = corners(i).Y
      Next i
      For i = 0 To 3
       corners(i).X -= xmin
       corners(i).Y -= ymin
      Next i
    
      '//Output Bitmap als Graphisches Objekt 
      Dim bm_out As New Bitmap(CInt(-2 * xmin), CInt(-2 * ymin))
      Dim gr_out As Graphics = Graphics.FromImage(bm_out)
    
      ReDim Preserve corners(2)
    
      '//Resultat in das Output Bitmap speichern
      gr_out.DrawImage(bm_in, corners)
    
      '//Endresultat
      PictureBox1.Image = bm_out
    
    
     End Sub
    
    

    Ich bin mir nicht sicher, ob ich diesen Code seinezeit von Elmar oder Robert bekommen habe (denke von Elmar), der funktioniert doch super.


    Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 Express
    Donnerstag, 6. Januar 2011 18:20
  • Freitag, 7. Januar 2011 03:25
  • Hallo Stefan,

    Von mir hast Du vielleicht den Code jetzt, aus diesem Thread bekommen, weil ich ihn in meinem vorigen Beitrag gepostet habe J

    Wie Du aus Thorstens Gudera Beitrag sehen kannst gibt es zwei Art Drehungen: Eine Art wo man die Bildgrösse beinhaltet beim drehen und andere wo sich die Bildgrösse am Winkel anpasst. Unsere Beispiele (Beispiel) die wir gepostet haben, passen das Bild an dem Winkel an, deshalb die Trigonometrie dort. Der Beitrag von Stefan Falz zeigt uns das Beispiel wo die Bildgrösse sich nicht verändert, deshalb die abgeschnittenen „corners“.

    Grüße,

    Robert

    Freitag, 7. Januar 2011 13:37
    Moderator
  • Hallo zusammen,

    Diskussion in Zusammenhang auf den MSDN EN-US Foren:

    Rotate Pictuerbox to any angle

    Grüße,

    Robert

    Mittwoch, 19. Januar 2011 12:33
    Moderator