Круговая палитра выбора цвета - 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