У меня есть вопрос по виджету Curves, в Photoshop: в этом виджете есть 3 пипетки(белая, черная и серая) Белая и черная выставляют правую и левую граничные точки, соответственно. В зависимости от значения канала в точке, куда указала пипетка.
Серая, же, пипетка выставляет точку на кривой каждого канала и мне совершенно не понятен принцип как Ps выставляет эти точки.
Может кто знает, что за магия скрывается за серой пипеткой?
Возьмём для примера grayscale изображение: только один канал со значениями от 0 до 255. Его «середина» 128.
Вы тыкнули серой пипеткой на картинке в точку со значением 100.
Выходная картинка пересчитается так, что ее бывшие 128 станут 100, а промежуточные значения также изменятся в соотв. с неким алгоритмом, чтобы равномерно заполнить искажённое «пространство» значений.
Это я назвал «мапится» от оператора map() в Processing.
Для Levels это линейная зависимость: две прямые, от чёрного до середины и второе плечо от середины до белого.
Для Curves это интерполяция кривой, может, Безье, по проприетарному неизвестному мне алгоритму. Придумайте свой, условий три: «средняя» точка может занимать любое положение в квадрате; ни одна точка кривой не вылезает за квадрат; в «средней» точке кривая не «ломается»: касательная входа = касательной выхода, но может, разные радиусы кривизны. Вполне может быть, что в математических терминах эта задача выглядит проще и решение проще: )
Не совсем то, у меня есть кривая, у меня, в принципе, всё есть. Загвоздка только в серой пипетке. Т.е в том, как посчитать эти точки, чтобы по ним построить кривую.
Я, похоже, не точно изъясняюсь. Я построил кривую, могу таскать точки и делать всё, что умеет Ps curves(там обычный кубический сплайн, без всяких наворотов, скорее всего. Хот это и не важно. Подойдёт любая интерполяция). Единственно, что я не могу сделать, это ткнув серой пипеткой в пиксел получить по одной точке для каждого канала, через которые я и проведу кривую. Т.е. проблема только в 3-х точках. Ни в чём другом проблемы нет.
Так это частный вопрос по программированию — на чем вы пишете, что возвращает ваша пипетка. В Processing (и соотв. Java) есть такой тип данных color который возвращается в частности его «пипеткой». Это 32-битное число AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB: по 8 бит: прозрачность, красный канал, зеленый канал и синий. Битовым сдвигом можно получить напр 8 бит только зеленого канала, т.е. значение от 0 до 255.
Так что ваша пипетка возвращает?
Да нет же. Смотрите, к примеру ткнул я пипеткой в пиксель(aabbcc), имеем мы значит R=aa, G=bb, B=cc. И было бы замечательно, если бы точки с таким значениями и выставлялись на прямой. Но это не так.
Из моих экспериментов(в десятичной системе):
Значения в точке (238, 0, 0), значения на кривых (246, 13, 13)
(162, 0, 0) (224, 52, 52)
(195, 195, 0) (217, 217, 4(0))