Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Создание динамического градиента для палитры цветов HSB

Автор вопроса: Jiew MengОтветов: 3

Я хочу создать палитру цветов в WPF/C#, аналогичную той, что я вижу в Photoshop.

альтернативный текст

Когда я перемещаю ползунок оттенка, градиент должен обновляться. Сначала я хочу знать, как создать градиент, где должны появляться отдельные цветовые точки и какие цветовые значения они должны содержать.

Вышеупомянутое может быть сложнее реализовать, поскольку градиент состоит из

  • Белый - Красный
  • Белый черный
  • Черный Красный

Я могу легко создавать отдельные градиенты, но как я могу создать такой "составной" градиент?

Более простой альтернативой является наличие 3 ползунков для значений HSB.

альтернативный текст

Когда я перемещаю один ползунок, цвета на двух других ползунках должны обновляться. Любые ссылки или советы, чтобы я начал? Мне нужно найти способ вычислить цвета на двух других ползунках, когда я перемещаю один. Например. когда я перемещаю ползунок оттенка с красного на синий, насыщенность и яркость должны обновляться, скажем, от ненасыщенного до насыщенного красного до синего и от темного до светло-красного до синего.

colorswpf

Ответы

Ответ 1 · рейтинг 1 · Nicolas Repiquet

Насчет градиента, я думаю, вы должны нарисовать его сами. Взгляните на WriteableBitmap.

Три ползунка могут быть реализованы следующим образом:

  • Реализуйте абстрактный IMultivalueConverter, который преобразует два значения цветовых компонентов в градиентную кисть. Преобразователь просто берет значения двух компонентов цвета, создает градиент третьего неизвестного значения компонента и возвращает его.
  • Выведите три конкретных преобразователя: HSToBGradientConverter, SBToHGradientConverter, BHToSGradientConverter.
  • Привязка фона дорожек слайдера с мультипривязкой на соответствующих цветовых компонентах и ​​конвертере.

Ответ 2 · рейтинг 1 · Eric Smith

http://blogs.msdn.com/b/wpfsdk/archive/2006/10/26/uncommon-dialogs--font-chooser-and-color-picker-dialogs.aspx

Проверьте диалоговое окно выбора цвета. Это должно быть хорошим местом для начала.

Надеюсь, поможет!

Ответ 3 · Chris

Обратите внимание, что градиент на самом деле не состоит из трех перечисленных вами вещей. Ваша проблема в том, что вы все еще думаете о цветовом пространстве RGB, на которое это похоже. На самом деле весь смысл этого квадрата в том, что он представляет собой градиент от 0 насыщенности до 100% насыщенности слева направо и от 0 яркости до 100% яркости сверху вниз.

Я бы создал квадратное изображение, а затем для каждого пикселя определил, какой насыщенности и яркости он соответствует, а затем вставил этот цвет (конечно, с информацией об оттенке).

Я предполагаю, что у вас уже есть возможность конвертировать цвета HSB в цвета RGB. Если нет, это должно быть первой точкой вызова, и алгоритмы для этого должны быть легко найдены (если не кричать, и я могу их откопать).

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы