Je fais une horloge analogique dans lequel je dois faire pivoter l'image dans mon picturebox ...Faire pivoter l'image dans picturebox
par exemple Je veux faire pivoter mon image de 6 degrés chaque seconde.
Que puis-je faire pour cela?
Merci ....
Je fais une horloge analogique dans lequel je dois faire pivoter l'image dans mon picturebox ...Faire pivoter l'image dans picturebox
par exemple Je veux faire pivoter mon image de 6 degrés chaque seconde.
Que puis-je faire pour cela?
Merci ....
Voici ci-dessous les liens pour la question
RotateFlipType ont défini angles 90,180,270 mais je veux faire pivoter 6 degrés –
@Javed Akram: Oui, l'exemple de code utilise simplement les capacités du cadre , mais les deux liens devraient vous donner envie que vous voulez. – Oliver
@javed Akram voir le premier lien j'ai posté, il détient ce que vous voulez dans C# – ratty
Je me souviens jamais écrire un UserControl Clock comme il y a quelque temps. Voici le code fondamental pour faire votre demande.
Private Sub Paint_Clock(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) _
Handles Clock.Paint
Dim _independentHands as Boolean = False
Dim g As Graphics = e.Graphics
Dim centrePoint As Point = New Point(Clock.Width \ 2, Clock.Height \ 2)
Dim _time As New TimeSpan(5, 2, 15)
'pens'
Dim hourPen As New Pen(Color.Black, 3)
Dim minPen As New Pen(Color.Black, 2)
Dim secPen As New Pen(Color.Red, 1)
'clock hand lengths'
Dim halfClockWidth As Integer = Clock.Width \ 2
Dim hourLength As Integer = CInt(halfClockWidth * (4/6)) - 5
Dim minLength As Integer = CInt(halfClockWidth * (5/6)) - 5
Dim secLength As Integer = CInt(halfClockWidth * (5/6)) - 5
Dim secLength2 As Integer = CInt(halfClockWidth * (1/6))
'angles'
Dim secAngle As Single = CSng(_time.Seconds/60) * 360
Dim secAngle2 As Single = secAngle - 180
Dim minAngle As Single = CSng(_time.Minutes/60) * 360
Dim hrAngle As Single = CSng((_time.Hours - 12)/12) * 360
If Not _independentHands Then minAngle += (secAngle/60)
If Not _independentHands Then hrAngle += (minAngle/12)
'centre point'
Dim pointPen As New Pen(Color.Black, 4)
Dim pointRect As New Rectangle(centrePoint.X - 2, centrePoint.Y - 2, 4, 4)
'antialias on'
g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
'draw the background'
g.DrawImage(My.Resources.ClockBack, 0, 0, Clock.Width, Clock.Height)
'draw the hands'
g.DrawLine(hourPen, centrePoint, GetPoint2(centrePoint, hrAngle, hourLength))
g.DrawLine(minPen, centrePoint, GetPoint2(centrePoint, minAngle, minLength))
g.DrawLine(secPen, centrePoint, GetPoint2(centrePoint, secAngle, secLength))
g.DrawLine(secPen, centrePoint, GetPoint2(centrePoint, secAngle2, secLength2))
'draw the centre point'
g.DrawEllipse(pointPen, pointRect)
'draw the glass'
g.DrawImage(My.Resources.ClockGlass, 0, 0, Clock.Width, Clock.Height)
End Sub
Private Function GetPoint2(ByVal startPoint As Point, _
ByVal angle As Single, _
ByVal length As Integer) As Point
Dim x, y As Integer
Dim sp As Point = startPoint
'normalize'
Do While angle - 360 > 0
angle -= 360
Loop
Do While angle < 0
angle += 360
Loop
If angle = 360 Then angle = 0
Dim rad = angle * (Math.PI/180) 'angle in radians'
'calc the new point'
x = CInt(length * Math.Sin(rad))
y = CInt(length * Math.Cos(rad))
Return New Point(sp.X + x, sp.Y - y)
End Function
Remarques
1. Ajoutez un PictureBox avec le nom d'horloge à votre formulaire (ou usercontrol)
2. Ajouter une ressource appelée ClockBack pour l'arrière-plan de l'horloge (le visage de l'horloge).
3. Ajoutez une ressource appelée ClockGlass pour le cadran vitreux de l'horloge.
4. Déposez le code ci-dessus dans votre formulaire.
5. Définissez l'intervalle d'une minuterie sur 1000 et son Tick
événement Refresh
ou Invalidate
l'horloge [qui est un PictureBox].
Veuillez noter que la variable _independentHands
rend les aiguilles de l'horloge indépendantes l'une de l'autre lorsqu'elles sont définies sur true.
Par exemple, lorsqu'il est défini sur False
, 4:30 aura l'aiguille des heures à mi-chemin entre 4 et 5. Lorsque True
, l'aiguille des heures sera sur 4 jusqu'à 4:59:59 et passera à 5 à 5 : 00: 00 Je préfère laisser à false pour donner l'impression d'horloge naturelle.
mains de l'horloge ne bougent pas ..... –
Voir la variable appelée ** _ temps ** à la ligne 8 de mon code? Changez juste l'heure que vous souhaitez afficher. Il est préférable de le charger à partir d'une variable de niveau Classe afin que votre minuteur puisse définir l'heure avant la mise à jour de l'horloge. –
essayer cette
pictureBox1.Image.RotateFlip ((RotateFlipType.Rotate90FlipX));
ou faire pivoter ce dans un fil pour 1000 ms
Pas ce qu'il a demandé ... il a besoin de la possibilité de faire pivoter l'image de 6 °, pas 90 °. – Bobby
Oui, comme j'ai commenté sur ratty –
@javed Akram vous devez toujours répondre à votre problème – ratty
@ratty, oui s'il vous plaît ... –
@Javed Akram Avez-vous pensé à utiliser une liste d'images avec des images et juste changé d'image chaque horloge "tick"? Cela pourrait être une solution plutôt appropriée qui ne nécessite pas autant de calculs à chaque mise à jour. – Mikael