Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
25 / 25 / 6
Регистрация: 09.09.2015
Сообщений: 149
1

Круговая палитра выбора цвета

10.12.2016, 17:58. Показов 2536. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем, помогите реализовать идею: круговой выбор цвета как в графических редакторах

вот к примеру Paint.NET. Кстати реализовано на NET:

Круговая палитра выбора цвета
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.12.2016, 17:58
Ответы с готовыми решениями:

Диалоги выбора цвета и шрифта - получение результата выбора
Имеем функцию Function FUN_OPEN_FONT() As String ' диалог выбора ЦВЕТА '...

Используя диалог выбора цвета, сменить фон формы
Сделал Меню,со вкладкой фон там есть кнопка выбрать и вот такой код Private Sub...

Палитра выбора цвета
есть ли в wpf что-то вроде объекта, как в WinForms - ColorDialog м? или как можно организовать...

Нужна задачка выбора названия цвета в ComboBox и последующего появления самого цвета в другом окне
Выбираешь название цвета (red,black и т.д) в ComboBox и чтобы сам цвет появлялся в другом окне....

4
25 / 25 / 6
Регистрация: 09.09.2015
Сообщений: 149
11.12.2016, 10:39  [ТС] 2
Короче, посидел и сделал сам: скопировал кружочек в картинку и вставил через PictureBox

Затем нужно было получить цвет пикселя под курсором:

VB.NET
1
2
3
4
    Private Sub PictureBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseMove
         Dim myBitmap As New Bitmap(PictureBox1.Image)
         Dim col As Color = myBitmap.GetPixel(e.X, e.Y)
    End Sub
6
207 / 224 / 87
Регистрация: 21.04.2013
Сообщений: 404
12.12.2016, 01:07 3
Лучший ответ Сообщение было отмечено BatyrbekAl как решение

Решение

BatyrbekAl, так лучше не делать.
Тут подход такой:
1) Использовать декартовы координаты и переводить их в полярные.
Угол даст значение H. Радиус даст значение S или V (не пробовал этот выбор в программах).
Вообще S и V можно вывести на отдельные движки (TrackBar), а от цветового круга оставить только цветовое кольцо.
2) Значения H, S и V нужно перевести в RGB.
З.Ы. Цветовое колесо ищется в сети по запросу "Color Wheel", конвертер - HSV to RGB. Все это, конечно, с приставкой VB.Net или C#.

З.З.Ы.
Покопавшись в исходниках, нашел вариант (не мой!) построения цветового колеса:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
3
1496 / 1044 / 146
Регистрация: 01.10.2009
Сообщений: 3,510
Записей в блоге: 1
12.12.2016, 08:39 4
Petr_S, и все же плюсаните человеку, тут вон в соседней ветке, 5 дней рисуют блок-схему с вопросом, а тут принял навыки и решил свою проблему)
0
207 / 224 / 87
Регистрация: 21.04.2013
Сообщений: 404
12.12.2016, 12:08 5
XIST, плюсанул. Но я, вообще-то, и не порицал. То, что сам нашел решение - молодец.
0
12.12.2016, 12:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2016, 12:08
Помогаю со студенческими работами здесь

ContextMenu изменение цвета выбора и цвета текста
Добрый день подскажите как сделать так что бы после выбора пункта меню цвет текста менялся обратно...

Как создать диалог выбора шрифта и диалог выбора цвета
как создать диалог выбора шрифта и диалог выбора цвета в wpf

UserControl выбора цвета
Здравствуйте! Помогите пожалуйста написать вот такой UserControl для WindowsForms!

Меню выбора цвета
Нашёл программу на С++ (исходник рабочий), С++ я не знаю. https://yadi.sk/d/LMbvXOKGrrYbZ Хочу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru