Круговая палитра выбора цвета - Visual Basic .NET
Формулировка задачи:
Привет всем, помогите реализовать идею: круговой выбор цвета как в графических редакторах
вот к примеру Paint.NET. Кстати реализовано на NET:
Решение задачи: «Круговая палитра выбора цвета»
textual
Листинг программы
- Imports System.Drawing.Drawing2D
- Public Class Form1
- Private Function HSVtoRGB(ByVal hue As Double, ByVal saturation As Double, ByVal value As Double) As Color
- Dim r, g, b, f, p, q, t As Double
- Dim i As Integer
- If saturation = 0 Then
- Return Color.FromArgb(CInt(255 * value), CInt(255 * value), CInt(255 * value))
- End If
- hue /= 60
- i = CInt(Math.Floor(hue))
- f = hue - i
- p = value * (1 - saturation)
- q = value * (1 - saturation * f)
- t = value * (1 - saturation * (1 - f))
- Try
- Select Case i
- Case 0
- r = value : g = t : b = p
- Case 1
- r = q : g = value : b = p
- Case 2
- r = p : g = value : b = t
- Case 3
- r = p : g = q : b = value
- Case 4
- r = t : g = p : b = value
- Case 5
- r = value : g = p : b = q
- End Select
- Return Color.FromArgb(CInt(255 * r), CInt(255 * g), CInt(255 * b))
- Catch ex As Exception
- End Try
- Return Color.Empty
- End Function
- Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles PictureBox1.Paint
- e.Graphics.Clear(SystemColors.Control)
- Dim w, h As Integer
- w = PictureBox1.ClientSize.Width >> 1
- h = PictureBox1.ClientSize.Height >> 1
- Dim p1 As Point = New Point(w, h)
- Dim colors() As Color = New Color(359) {}
- Dim points() As PointF = New PointF(359) {}
- For phi As Integer = 0 To 359
- points(phi) = New PointF(CSng(Math.Cos(phi * Math.PI / 180) * w + w),
- CSng(h - Math.Sin(phi * Math.PI / 180) * h))
- colors(phi) = HSVtoRGB(phi, 1, 1)
- Next
- Dim b As New PathGradientBrush(points, WrapMode.Clamp)
- b.CenterColor = Color.White
- b.CenterPoint = p1
- b.SurroundColors = colors
- e.Graphics.SmoothingMode = SmoothingMode.HighQuality
- e.Graphics.FillEllipse(b, 0, 0, w << 1, w << 1)
- End Sub
- End Class
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д