Мне в основном нужен прямоугольник в моей форме, который показывает градиент радуги и анимирует его (движется вправо), предпочтительно в качестве фона, чтобы я мог показать прозрачную картинку сверху.
Я пытался анимировать радугу GIFв качестве фона, но изображение никогда не будет таким легким, как спектр, сгенерированный кодом.
Мне также удалось реализовать случайный код движущегося градиента, но это перемещает градиент назад и вперед.
'' '
Private Sub picCanvas_Paint(ByVal sender As Object, ByVal e _
As PaintEventArgs) Handles _
WallpaperPreview.Paint
' Draw the background gradient.
Dim br As New LinearGradientBrush(New Point(0, 0), New _
Point(Me.ClientSize.Width, 0), Color.Red,
Color.Blue)
Dim color_blend As New ColorBlend
color_blend.Colors = New Color() {Color.Red,
Color.White, Color.Blue}
color_blend.Positions = New Single() {0, m_Middle, 1}
br.InterpolationColors = color_blend
e.Graphics.FillRectangle(br, Me.ClientRectangle)
br.Dispose()
' Change the gradient's midpoint.
m_Middle += m_Delta
If (m_Middle > 1) OrElse (m_Middle < 0) Then m_Delta =
-m_Delta
End Sub
' ''
Есть ли способ, которым я могу преобразовать это в всегда вправо движущийся градиент радуги?
Редактировать: Мое решениеэто
'' '
Private posX As Single = 0
Private posXmover As Single = 10
Private Sub Timer_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer.Tick
WallpaperPreview.Invalidate()
End Sub
Private Sub WallpaperPreview_Paint(ByVal sender As Object, ByVal e _
As PaintEventArgs) Handles _
WallpaperPreview.Paint
Dim rect As New Rectangle(posX, 0,
WallpaperPreview.ClientSize.Width * 2,
WallpaperPreview.ClientSize.Height)
Dim br As New LinearGradientBrush(rect, Color.Red,
Color.Blue, 0)
Dim color_blend As New ColorBlend
color_blend.Colors = New Color() {
Color.Red,
Color.Magenta,
Color.Blue,
Color.Cyan,
Color.Green,
Color.Yellow,
Color.Red,
Color.Magenta,
Color.Blue,
Color.Cyan,
Color.Green,
Color.Yellow,
Color.Red}
color_blend.Positions = New Single() {0, 0.083F, 0.163F, 0.249F, 0.332F, 0.415F, 0.5F, 0.583F, 0.66F, 0.749F, 0.832F, 0.915F, 1}
br.InterpolationColors = color_blend
e.Graphics.Clear(WallpaperPreview.BackColor)
e.Graphics.FillRectangle(br, Me.ClientRectangle)
br.Dispose()
posX += posXmover
End Sub
' ''