gpt4 book ai didi

c# - 旋转 pictureBox 中的图像

转载 作者:行者123 更新时间:2023-11-30 15:09:42 26 4
gpt4 key购买 nike

我正在制作一个模拟时钟,我必须在其中旋转我的 pictureBox 中的图像...

例如我想每秒将图像旋转 6 度。

我能为此做什么?

谢谢....

最佳答案

我记得以前写过一个类似时钟的 UserControl。这是执行您的请求的基本代码。

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

注意事项
1. 将名称为 Clock 的 PictureBox 添加到您的表单(或用户控件)
2. 为时钟的背景(时钟的表面)添加一个名为 ClockBack 的资源。
3. 为时钟的玻璃面添加一个名为 ClockGlass 的资源。
4. 将上面的代码拖放到您的表单中。
5. 将计时器的间隔设置为 1000,并使其 Tick 事件 RefreshInvalidate 时钟 [这是一个 PictureBox]。


请注意,变量 _independentHands 设置为 true 时会使时钟的指针彼此独立。
例如,当设置为 False 时,4:30 时针将在 4 和 5 之间。当设置为 True 时,时针将在 4 点到 4 点: 59:59 并将在 5:00:00 ‘跳’到 5。

我更喜欢将其设置为 false,以提供自然时钟的感觉。

关于c# - 旋转 pictureBox 中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4144106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com