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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5