Как бы я мог создать образец цвета радуги палитры цветов? - PullRequest
3 голосов
/ 21 февраля 2011

Мне скучно, и я хотел бы создать свой собственный цветной пикет.

Сначала я хотел бы создать образец цвета. Как бы я создал образец цвета?

Это вопрос из двух частей.

  1. Как нарисовать одну точку пикселя с учетом значения ARGB.

  2. Какие значения существуют в этих значениях ARGB? Какие у меня диапазоны?

Будет ли зацикливание и отрисовка этих точек эффективными? Мое намерение - создать это изображение в памяти, затем привести его к классу Drawing.Image, а затем установить его в графический блок.

Спасибо за предложения.

Ответы [ 2 ]

7 голосов
/ 21 февраля 2011

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

Вы можете нарисовать точку в одном пикселе, используя значение ARGB, используя метод SetPixel Bitmap класс .Цикл на каждом пикселе нового Bitmap объекта соответствующего размера и установка соответствующего цвета - это самый простой способ сделать это.Если вы сделаете это один раз при открытии палитры цветов и кешируете растровый объект в переменную уровня класса, перекрашивая его в элемент управления при необходимости вместо перерисовки каждый раз, производительность будет вполне респектабельной.

В противном случае SetPixel является самым медленным способом рисования растрового изображения, которое только можно представить.Существуют приемы для его ускорения, такие как блокировка растрового изображения и / или добавление в нативный код, но они не упрощают процесс .Что значительно упростит ваш код и даже обеспечит небольшое повышение производительности, так это использование кисти градиента для рисования.Graphics класс очень хорошо инкапсулирует функциональность рисования GDI +, и создание LinearGradientBrush объекта для рисования
довольно просто.

Что касается вашего второго вопроса, каковы диапазоны значений, которые вам нужно использовать, то первым делом нужно понимать цветовые модели, которые вы хотите представить в своем палитре цветов.Возможно, наиболее распространены и просты в работе два варианта: RGB и HSV (также известный как HSB; HSL - это нечто совершенно иное).

Цветовое пространство RGB, один цвет представлен значениями его компонентов красного, зеленого и синего цветов.Стандартная шкала представляет эти значения от 0 (минимум) до 255 (максимум).Белый представлен как (255, 255, 255), а черный представлен как (0, 0, 0).Поскольку это естественное цветовое пространство для мониторов, многие графические программы используют его.Конечно, это не очень интуитивно понятно для людей , которым трудно понять, как именно выразить, скажем, оранжевый, фиолетовый или коричневый в модели RGB.

Скорее, модель HSVгораздо более интуитивно понятен, и обычно тот, который вы видите, используется для рисования причудливых цветных сеток / градиентов.Эта модель используется (по умолчанию) в палитре цветов Photoshop, которая, пожалуй, самая известная из всех:

Adobe Photoshop Color Picker

В HSV цвет представлен тремя значениями атрибутов:оттенок, насыщенность и значение (или яркость).

  • оттенок примерно соответствует градусам цветового круга, поэтому он колеблется от 0 до 360.

    The Color Circle, indicating degrees of hue

Атрибуты насыщенности и значения часто рассматриваются как проценты в диапазоне от 0 до 100 (хотя они действительно могут быть представлены любым диапазоном значений).

  • Насыщенность описывает расстояние цвета от центра круга.Цвета на краю круга полностью насыщены (100), а цвета к центру - ненасыщенные (белый или 0).

    Saturation

  • Значение (или яркость) интуитивно понятно.Максимально полное значение яркого цвета равно 100, а минимальное значение яркости - 0 (черный).

    Value

С момента ответауже давно, я покажу вам пару примеров реализации палитр цветов, уже доступных в Интернете, вместо того, чтобы объяснять пошагово здесь:

  • The *Элемент управления 1080 * ColorPicker.NET представляет собой всеобъемлющее предложение, сопровождаемое удивительно подробным описанием
    .

  • Учебное пособие по созданию пользовательского элемента управления Color Picker с помощью GDI + в VB.NET или C # из журнала MSDN - это первая реализация средства выбора цвета, которую я когда-либо видел в Интернете, и хотя по сравнению с ней относительно просто , делает выдающуюся работу по объяснению технических деталей. (Я взял много пояснительных диаграмм, использованных в этом ответе, из его статьи.)

0 голосов
/ 21 февраля 2011

Я бы сказал, получить изображение нужной цветовой панели, а затем определить местоположение курсора мыши на изображении.Положение указателя - свойства X и Y в MouseEventArgs.Из этих координат вычислите цвет / прозрачность.

Диапазон RGB составляет 0-255, а A равен 0-100

Надеюсь, что эта помощь

...